Извлечение из коллекции - PullRequest
1 голос
/ 07 июля 2011

У меня есть объект коллекции DataGridView, и я проверяю наличие определенного условия. Если он нулевой, то я удаляю его из коллекции DataGridView. Вот мой код -

foreach(DataGridViewRow dr in myDataGridViewRowCollection.Rows)
{
    string title = TypeConvert.ToString(dr.Cells[Name].Value);
    if(title == null)
        //Remove it from the list. 
        myDataGridViewRowCollection.Rows.Remove(dr);
}

Теперь, если у меня есть 6 строк в myDataGridViewRowCollection и из них 5 из них имеют заголовок как ноль. Теперь вышеприведенный код удаляет только 3 из 5, а не оставшиеся два.

Я вроде понимаю проблему, но я не могу сейчас думать о решении. Есть мысли?

1 Ответ

3 голосов
/ 07 июля 2011

Проблема заключается в том, что вы изменяете коллекцию myDataGridViewRowCollection.Rows во время итерации по ней, что сбивает с толку / ломает итератор.Вы должны разделить это на два этапа.Сначала составьте список того, что вам нужно удалить, а затем вы можете удалить их.

var toRemove = myDataGridViewRowCollection.Rows.Where(x => x.Cells[Name].Value == null);

foreach(var row in toRemove){
    myDataGridViewRowCollection.Rows.Remove(row);
}
...