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);
}
}
}
Change
itemsToAdd
fromList
toHashSet
:Add MSDN:
Use
method it's fast then comparing where _items_Unique and _items are two list
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: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.
You should just call ListBox.Items.Contains() in an if statement to check if it has already been added.
Try this:
This assumes C# 3.5, at least.