2012-02-23 86 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>();