防止将重复项添加到ListBox

时间:2012-02-23 19:32:54

标签: c# asp.net listbox

我有这段代码可以将选定的项目从一个ListBox添加到另一个ListBox。如何防止用户两次添加项目?我希望他们添加到lstBoxToUserProjects的{​​{1}}只包含不重复条目的不同项目。

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

5 个答案:

答案 0 :(得分:4)

如果将lstBoxToUserProjects列表框绑定到数据源(HashSet),那么您可以进行简单检查以查看建议选择的项目是否已在目标中:

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

注意我提议使用HashSet,因为那时你可以对集合进行高效检查,而必须枚举List来检查匹配。

答案 1 :(得分:3)

您应该在if语句中调用ListBox.Items.Contains()来检查它是否已被添加。

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

答案 2 :(得分:2)

试试这个:

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

这至少假定是C#3.5。

答案 3 :(得分:0)

itemsToAddList更改为HashSet

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

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

Add MSDN

  

返回值

     

Type:System.Boolean如果元素被添加到HashSet(Of T),则为true   宾语;如果元素已存在,则返回false。 (gdoron-而不是再次插入元素......)

答案 4 :(得分:0)

使用

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

方法比较快 其中_items_Unique和_items是两个列表

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