防止将重复的项目添加到列表框中

发布于 2025-01-08 18:59:36 字数 1111 浏览 0 评论 0原文

我有这段代码,用于将选定的项目从一个 ListBox 添加到另一个。如何防止用户重复添加某个项目?我希望他们添加到 lstBoxToUserProjectsListBox 仅包含不同的项目,没有重复的条目。

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

I have this code for adding selected items from one ListBox to another. How can I prevent the user from adding an item twice? I want the ListBox they are adding to lstBoxToUserProjects to only contain distinct items with no duplicate entries.

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:
Here's what I ended up using

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

感悟人生的甜 2025-01-15 18:59:36

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

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

注意,我建议使用 HashSet,因为那时您可以对集合进行高性能检查,而必须枚举列表才能检查匹配项。

If you bind the lstBoxToUserProjects list box to a datasource (HashSet) then you could do a simple check to see if the item proposed for selection was already in the destination:

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

Note I'm proposing a HashSet because then you can do a performant check on the set whereas a List would have to be enumerated to check for a match.

似最初 2025-01-15 18:59:36

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

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

You should just call ListBox.Items.Contains() in an if statement to check if it has already been added.

foreach (ListItem listItem in itemsToAdd)
{
    if (!lstBoxToUserProjects.Items.Contains(listItem))
    {
        lstBoxToUserProjects.Items.Add(listItem);
    }
}
双手揣兜 2025-01-15 18:59:36

试试这个:

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

这至少假设 C# 3.5。

Try this:

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

This assumes C# 3.5, at least.

烟若柳尘 2025-01-15 18:59:36

itemsToAddList 更改为 HashSet

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

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

添加 MSDN

返回值

类型:System.Boolean 如果元素添加到 HashSet(Of T),则为 true
目的;如果该元素已经存在,则返回 false。 (gdoron-并且不再插入元素...)

Change itemsToAdd from List to HashSet:

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

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

Add MSDN:

Return Value

Type: System.Boolean true if the element is added to the HashSet(Of T)
object; false if the element is already present. (gdoron- and not inserting the element again...)

对岸观火 2025-01-15 18:59:36

使用

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

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

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

Use

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

method it's fast then comparing
where _items_Unique and _items are two list

List<string> _items_Unique = new List<string>();
List<string> _items = new List<string>();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文