防止重复的项目被添加到ListBox中。

问题描述 投票:6回答:5

我有这样的代码,用于从一个项目中添加选定的项目。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);
    }
}

EDIT:这是我最后使用的方法。

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);
        }
    }
}
c# asp.net listbox
5个回答
4
投票

如果你绑定了 lstBoxToUserProjects 列表框到数据源(HashSet),然后你可以做一个简单的检查,看看提议选择的项目是否已经在目标中。

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

注意,我建议使用HashSet,因为这样你就可以对集合进行执行检查,而List则必须通过枚举来检查是否匹配。


3
投票

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

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

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
投票

更改 itemsToAddListHashSet:

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

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

添加MSDN:

返回值

Type.Boolean 如果元素被添加到HashSet(Of T)对象中,则为true;如果元素已经存在,则为false。(gdoron-而不是再次插入元素...)


0
投票

使用

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

方法,然后比较where _items_Unique和_items是两个列表,这是快的。

List<string> _items_Unique = new List<string>();
List<string> _items = new List<string>();
© www.soinside.com 2019 - 2024. All rights reserved.