如何防止重复项listView C#
我正在使用Windows Forms
。 使用此代码,我从comboBox
向listView
添加项目。
ListViewItem lvi = new ListViewItem(); lvi.Text = comboBox1.Text; lvi.SubItems.Add(""); lvi.SubItems.Add(""); lvi.SubItems.Add(""); lvi.SubItems.Add("") if (!listView1.Items.Contains(lvi)) { listView1.Items.Add(lvi); }
我需要防止重复的项目,但不能工作,我该如何解决这个问题?
您应该使用ContainsKey(string key)
而不是Contains(ListViewItem item)
var txt = comboBox1.Text; if (!listView1.Items.ContainsKey(txt)) { lvi.Text = txt; // this is the key that ContainsKey uses. you might want to use the value // of the ComboBox or something else, depending the combobox is freetext // or regarding your scenario. lvi.Name = txt; lvi.SubItems.Add(""); lvi.SubItems.Add(""); lvi.SubItems.Add(""); lvi.SubItems.Add(""); listView1.Items.Add(lvi); }
ListView类提供了一些检查项是否存在的方法:
-
Contains
OnItems collection
,和 -
FindItemWithText
方法
它可以像:
// assuming you had a pre-existing item ListViewItem item = ListView1.FindItemWithText("item_key"); if (item == null) { // item does not exist } // you can also use the overloaded method to match subitems ListViewItem item = ListView1.FindItemWithText("sub_item_text", true, 0);
这段代码对我有用:
if(DialogResult.OK == fileDialogue.ShowDialog()) { foreach (var v in fileDialogue.FileNames) { if (listView.FindItemWithText(v) == null) { listView.Items.Add(v); } else //Throw error message
if (!listView1.Items.Any(i => i.text == lvi.text)) { listView1.items.Add(lvi) }
我只是猜测文本属性,但我很确定那里有。
或者 – 只需要一个List
并将其用作列表的数据源。
String csVal = Value; ListViewItem csItem = new ListViewItem(csVal); if (!listViewABC.Items.ContainsKey(csVal)) { csItem.Name = csVal; listViewABC.Items.Add(csItem ); }