2013-03-08 8 views
6

나는 Windows Forms을 사용하고 있습니다. 이 코드를 사용하면 listView에 항목을 comboBox에서 추가합니다.중복 된 항목을 방지하는 방법 listView C#

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); 
} 

중복 항목을 방지해야하지만 작동하지 않아야합니다. 어떻게 해결할 수 있습니까?

+2

은'Contains' 검사를, "항목과 동일한'.Text' 및 (아마) 유사한 하위 항목을 포함합니다. –

답변

8

대신이 코드는 나를 위해 일한 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); 
} 
+0

매력처럼 작동합니다! 감사! –

+0

둘 다 작동하지 않습니다. – CodeOptimizer

11

목록보기 클래스는 항목이 존재하는지 확인하기 위해 몇 가지 방법을 제공합니다 :

Items collection 그것은처럼 사용할 수 있습니다

:

// 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); 
0
if (!listView1.Items.Any(i => i.text == lvi.text)) 
{ 
    listView1.items.Add(lvi) 
} 

저는 텍스트 속성을 추측하고 있습니다.하지만 그 점이 확실합니다.

또는 List<string>이 있고 목록의 데이터 원본으로 사용하십시오.

1

ContainsKey(string key)를 사용한다 :은 "유사하지가 기준이 존재 * * 여부를

if(DialogResult.OK == fileDialogue.ShowDialog()) 
      { 
       foreach (var v in fileDialogue.FileNames) 
       { 
        if (listView.FindItemWithText(v) == null) 
        { 
         listView.Items.Add(v); 
        } 

        else 
        //Throw error message 
0
String csVal = Value; 
ListViewItem csItem = new ListViewItem(csVal); 
if (!listViewABC.Items.ContainsKey(csVal)) 
{ 
    csItem.Name = csVal; 
    listViewABC.Items.Add(csItem); 
} 
관련 문제