我在gridview中有一个下拉列表,在gridview加载时从数据源加载。有人可以告诉我如何循环下拉列表并根据if条件从列表中删除某些项目。
答案 0 :(得分:36)
无需循环项目,只需找到该项目并将其删除:
ListItem itemToRemove = myDropDown.Items.FindByValue("value");
if (itemToRemove != null)
{
myDropDown.Items.Remove(itemToRemove);
}
或者,如果您知道要删除的项目的索引,请使用RemoveAt方法:
myDropDown.Items.RemoveAt(0);
但是如果你想要循环,这就是循环:
foreach (ListItem item in myDropDown.Items)
{
// your stuff
}
答案 1 :(得分:7)
您无法使用foreach删除项目,因为一旦删除了项目,集合就会被修改,并且循环会抛出异常。
如果必须遍历集合以删除多个项目,最佳解决方案是在集合中向后循环。我的C#很生锈,所以下面是VB。应该很容易转换。
For x As Integer = myDropDown.Items.Count - 1 to 0 Step -1
Dim item As ListItem = myDropDown.Items(x)
If item.TestToSeeIfItShouldBeRemoved = True
myDropDown.Items.RemoveAt(x)
End If
End For
答案 2 :(得分:2)
您不能使用for-each循环,因为在使用枚举器对象时无法修改集合。最好的方法是按照@Jason的说法倒数。或者像这样使用for循环:
for (int i = 0; i < this.MyDropDownList.Items.Count; i++)
{
//test to see if this item needs to be removed or not
if (IsToBeRemoved(this.MyDropDownList.Items[i]))
{
this.MyDropDownList.Items.Remove(this.MyDropDownList.Items[i]);
//re-set to next item in the list (count changed after item removed)
i -= 1;
}
}
请注意,删除ListItem
后,DropDownList
项目计数会发生变化。因此,您需要递减计数器变量i
,否则您可能无法评估所有项目。
答案 3 :(得分:0)
为什么不能使用for each item in mycollection.ToList()
这样,您可以在迭代过程中对列表进行更改,因为集合将转换为列表的副本而不是实际列表本身。