从DropDownList中删除列表项(Removing list items from the D

2019-08-05 03:04发布

我有一个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;
    }
}

只要注意您删除后ListItemDropDownList项目数会发生变化。 所以,你需要将你的递减计数器变量i ,否则你可能没有评估所有的项目。



Answer 4:

为什么你不能使用for each item in mycollection.ToList()这种方式,您可以通过列表中的迭代过程中的变化,因为收藏品被转换成一个列表的副本,而不是实际列表本身。



文章来源: Removing list items from the DropDownList