Удаление элементов списка из 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()
Таким образом, вы можете вносить изменения во время итерации через свой список, поскольку коллекция преобразуется в копию списка, а не сам фактический список.