Проблема при попытке удалить строку из DataTable - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть DataTable, плавающая в переменной сеанса, которая связана с GridView.

Я запрограммировал кнопку «Удалить» в GridView, которая вызывает метод для удаления этой строки следующим образом

private void DeleteRecordByID(int ID)
{
    DataTable dt = (DataTable)Session["tempPermissions"];
    DataRow rowDelete = dt.Rows[ID];
    dt.Rows.Remove(rowDelete);
}

У меня есть две тестовые записи в моем DataTable, которые загружаются из базы данных.

Моя проблема в том, что, когда я нажимаю удалить в записи, я получаю следующую ошибку

System.IndexOutOfRangeException: There is no row at position 22.

Несмотря на то, что в DataTable есть запись с идентификатором 22 ..

Кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

4 голосов
/ 19 апреля 2011

Индексатор ожидает индекс строки, а не ID .

Ваши строки могут быть

1
15
29
31

Но индексы просто от 0 до 3.

Существует несколько методов поиска строки в DataTable: от встроенных методов в DataTable до использования LINQ. Метод DataTable-центрированный - это определение столбца первичного ключа в таблице, например

DataColumn idColumn = dt.Columns["ID"];
dt.PrimaryKey = new[] { idColumn };

Это позволяет использовать метод DataTable.Rows.Find(object key) для извлечения строки.

DataRow row = dt.Rows.Find(22);

Если строки с данным ключом не существует, результатом будет null. Поэтому перед выполнением любых операций с выводом проверьте его на нулевое значение.

0 голосов
/ 19 апреля 2011

Обратите внимание, что вам также может потребоваться выполнить GridView.DataBind () после удаления.

...