2012-02-23 77 views
6

我有這個代碼添加選擇的項目從一個ListBox到另一個。我怎樣才能防止用戶添加一個項目兩次?我想ListBox他們添加到lstBoxToUserProjects只包含不重複的項目不同的項目。防止重複的項目被添加到列表框

protected void btnAddSelectedItem_Click(object sender, EventArgs e) 
{ 
    List<ListItem> itemsToAdd= new List<ListItem>(); 

    foreach (ListItem listItem in lstbxFromUserProjects.Items) 
    { 
     if (listItem.Selected) 
      itemsToAdd.Add(listItem); 
    } 

    foreach (ListItem listItem in itemsToAdd) 
    { 
     lstBoxToUserProjects.Items.Add(listItem); 
    } 
} 

編輯: 這裏是我最終使用

protected void btnAddSelectedItem_Click(object sender, EventArgs e) 
{ 
    List<ListItem> itemsToAdd= new List<ListItem>(); 

    foreach (ListItem listItem in lstbxFromUserProjects.Items) 
    { 
     if (listItem.Selected) 
      itemsToAdd.Add(listItem); 
    } 

    foreach (ListItem listItem in itemsToAdd) 
    { 

     if (!lstBoxToUserProjects.Items.Contains(listItem)) 
     { 
      lstBoxToUserProjects.Items.Add(listItem); 
     } 
    } 
} 
+0

你有使用包含方法的列表,看它是否已經存在考慮? – 2012-02-23 19:42:04

回答

4

如果您綁定lstBoxToUserProjects列表框中的數據源(HashSet的),那麼你可以做一個簡單的檢查,看看是否建議選擇該項目已經在目的地:

foreach(ListItem itemToAdd in itemsToAdd) 
{ 
    if (selectedItems.Contains(itemToAdd)) continue; 
    lstBoxToUserProjects.Items.Add(itemToAdd); 
} 

注意我提出一個HashSet的,因爲你可以做一組,而列表中的高性能檢查將不得不枚舉以檢查匹配。

0

變化itemsToAddListHashSet

HashSet<ListItem> itemsToAdd= new HashSet<ListItem>(); 

... 
itemsToAdd.Add(listItem) // Adds only new items. 

Add MSDN

返回值

類型:System.Boolean如果元素被添加到的HashSet(OF T) 對象;如果元素已經存在,則返回false。 (gdoron-沒有再插入元素...)

+0

我不是-1你的答案,但我認爲OP實際上需要'ListBox'中的項目是唯一的,不僅在單個添加操作中。 – Krizz 2012-02-23 19:38:35

+0

@Krizz。 **?!?!**。如果「添加」不會導致重複,它會如何發生? – gdoron 2012-02-23 19:40:46

+0

你確定'ListBox.ObjectCollection.Add'確保沒有重複嗎? – Krizz 2012-02-23 19:47:50

3

你應該在if語句中調用ListBox.Items.Contains()來檢查它是否已經被添加。

foreach (ListItem listItem in itemsToAdd) 
{ 
    if (!lstBoxToUserProjects.Items.Contains(listItem)) 
    { 
     lstBoxToUserProjects.Items.Add(listItem); 
    } 
} 
+0

你爲什麼不修正格式而不是道歉呢? – Krizz 2012-02-23 19:49:59

+0

我想不出如何調整格式。當我有更多時間時,我會弄清楚如何正確格式化它。 – cain 2012-02-23 19:52:56

+0

這次爲你做了這個 - 未來 - 只需縮進至少4個空格。 – Krizz 2012-02-23 19:55:02

2

試試這個:

protected void btnAddSelectedItem_Click(object sender, EventArgs e) 
{ 
    lstBoxToUserProjects.Items.AddRange(lstbxFromUserProjects.Items.Where(li => !lstBoxToUserProjects.Items.Contains(li)).ToArray()); 
} 

這假定C#3.5,至少。

0

使用

_items_Unique = _items.Distinct().ToList(); 

方法是快速,然後比較 其中_items_Unique和_items兩個列表

List<string> _items_Unique = new List<string>(); 
List<string> _items = new List<string>();