Как предотвратить дублирование элементов listView C#
Я использую Windows Forms. С помощью этого кода я добавляю элементы в listView из comboBox.
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);
}
Мне нужно предотвратить дублирование элементов, но не работать, как я могу решить эту проблему?
5 ответов:
Вы должны использовать
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наItems 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) }Я просто догадываюсь о свойстве text, но я почти уверен, что оно есть.
Альтернативно - просто иметь
List<string>и использовать его в качестве источника данных для вашего списка.
String csVal = Value; ListViewItem csItem = new ListViewItem(csVal); if (!listViewABC.Items.ContainsKey(csVal)) { csItem.Name = csVal; listViewABC.Items.Add(csItem ); }
Comments