我有这段代码可以将选定的项目从一个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);
}
}
}
答案 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)
将itemsToAdd
从List
更改为HashSet
:
HashSet<ListItem> itemsToAdd= new HashSet<ListItem>();
...
itemsToAdd.Add(listItem) // Adds only new items.
返回值
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>();