我有一个GridView,是从当gridview的负载数据源里面装一个下拉列表。 可能有人请告诉我我该怎么去循环的下拉列表,并根据若条件从列表中删除某些项目。
Answer 1:
无需环路的项目,只要找到该项目,并删除:
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
}
Answer 2:
您不能使用的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
Answer 3:
你不能使用for-each循环,因为在使用枚举器对象不能修改的集合。 要做到这一点,最好的办法就是倒数由@Jason说。 或使用了这样的循环:
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
,否则你可能没有评估所有的项目。
Answer 4:
为什么你不能使用for each item in mycollection.ToList()
这种方式,您可以通过列表中的迭代过程中的变化,因为收藏品被转换成一个列表的副本,而不是实际列表本身。
文章来源: Removing list items from the DropDownList