从DropDownList中删除列表项

时间:2009-09-11 07:49:23

标签: asp.net drop-down-menu

我在gridview中有一个下拉列表,在gridview加载时从数据源加载。有人可以告诉我如何循环下拉列表并根据if条件从列表中删除某些项目。

4 个答案:

答案 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() 这样,您可以在迭代过程中对列表进行更改,因为集合将转换为列表的副本而不是实际列表本身。