Удаление элементов списка из DropDownList

У меня есть раскрывающийся список внутри gridview, который загружается из источника данных при загрузке gridview. Может кто-нибудь, пожалуйста, покажите мне, как я перебираю выпадающий список и удаляю некоторые элементы из списка на основе условия if.

Ответы

Ответ 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
}

Ответ 2

Вы не можете использовать foreach для удаления элементов, как только вы удалили элемент, коллекция будет изменена, а цикл выдает исключение.

Если вам нужно выполнить цикл в коллекции, чтобы удалить несколько элементов, лучшим решением будет цикл назад через коллекцию. Мой С# довольно ржавый, поэтому в 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

Ответ 3

Вы не можете использовать цикл 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, иначе вы рискуете не оценивать все элементы.

Ответ 4

Почему вы не можете использовать for each item in mycollection.ToList() Таким образом, вы можете вносить изменения во время итерации через свой список, поскольку коллекция преобразуется в копию списка, а не сам фактический список.