Gridview удалить элементы

У меня есть gridview, в котором источником данных является List<T>. Когда я пытаюсь удалить элемент из сетки в моей функции buttonRemove_Click(), вызывается другая функция, которая обрабатывает событие RowDeleting, где я также удаляю элемент из List<T>. Проблема в том, что если я выберу удаление нескольких элементов из сетки, индекс сетки и индекс моих List<T> несинхронизируются. Например, у меня есть 10 элементов в моем представлении сетки и в моем списке, и я пытаюсь удалить последние два элемента. Вот как я это делаю в моей функции buttonRemove_Click

foreach (GridViewRow row in gridViewItems.Rows)
{
    CheckBox cb = (CheckBox)row.FindControl("checkBox");

    if (cb != null && cb.Checked)
    {
        gridViewItems.DeleteRow(row.DataItemIndex);
    }
}

Тогда в функции RowDeleting я сначала получу событие для индекса 8, я его удалил. Теперь, когда дело доходит до удаления последнего элемента (индекс 9), возникает исключение, потому что индекс выходит за пределы допустимого диапазона. Как решить эту проблему?

Я думаю, что проблема будет решена, если я попытаюсь удалить строки в обратном порядке, т.е. начиная с самого высокого индекса. Кто-нибудь может сказать, как это можно сделать?


person Tux    schedule 11.02.2011    source источник


Ответы (1)


GVGLCode1.DataSource = dt;
GVGLCode1.DataBind();

int iCount = GVGLCode1.Rows.Count;
for (int i = 0; i <= iCount; i++)
{
    CheckBox cb = (CheckBox)GVGLCode1.rows[i].FindControl("checkBox");
    if (cb != null && cb.Checked)
    { 
       GVGLCode1.DeleteRow(i);
    }
}

Пожалуйста, попробуйте с этим. Может быть, это может помочь вам.

person harshagile    schedule 11.02.2011
comment
Пожалуйста, найдите флажок в каждой строке. - person harshagile; 11.02.2011
comment
Пожалуйста, добавьте CheckBox cb = (CheckBox)GVGLCode1[i].rows.FindControl(checkBox); - person harshagile; 11.02.2011
comment
Получите Pk из условия if и поместите код удаления, чтобы он напрямую удалялся из базы данных, а затем снова привязывал это представление сетки. - person harshagile; 12.02.2011