Как удалить все строки из таблицы данных - PullRequest
3 голосов
/ 19 апреля 2011

Я хочу удалить все строки из таблицы данных со значением свойства rowstate Удалено.

DataTable dt;
dt.Clear(); // this will not set rowstate property to delete.

В настоящее время я перебираю все строки и удаляю каждую строку.

Есть ли эффективный способ? Я не хочу удалять в SQL Server. Я хочу использовать метод DataTable.


Ответы [ 8 ]

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

Мы используем этот способ:

for(int i = table.Rows.Count - 1; i >= 0; i--) {
    DataRow row = table.Rows[i];
    if ( row.RowState == DataRowState.Deleted ) { table.Rows.RemoveAt(i); }
}
3 голосов
/ 20 января 2012

Это будет удовлетворять любым каскадным отношениям FK, таким как «delete» (что DataTable.Clear () не будет):

DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
     dt.Rows[0].Delete();
}
2 голосов
/ 20 августа 2015
dt.Rows.Clear();
dt.Columns.Clear();   //warning: All Columns delete
dt.Dispose();
0 голосов
/ 26 марта 2012

Вот решение, которое я нашел в своем собственном коде после поиска этого вопроса, основываясь на ответе Хорхе.

DataTable RemoveRowsTable = ...;
int i=0;
//Remove All
while (i < RemoveRowsTable.Rows.Count)
{
     DataRow currentRow = RemoveRowsTable.Rows[i];
     if (currentRow.RowState != DataRowState.Deleted)
     {
         currentRow.Delete();
     }
     else
     {
         i++;
     }
}

Таким образом, вы гарантируете, что все строки либо будут удалены, либо ихДля DataRowState установлено значение «Удалено».

Кроме того, вы не получите InvalidOperationException из-за изменения коллекции при перечислении, поскольку foreach не используется.Однако ошибка в бесконечном цикле, к которой уязвимо решение Хорхе, здесь не является проблемой, поскольку код будет увеличиваться после DataRow, для которого DataRowState уже был установлен как Deleted.

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

Я обычно выполняю следующую команду SQL:

DELETE FROM TABLE WHERE ID>0
0 голосов
/ 19 апреля 2011

Вы можете создать хранимую процедуру на базе данных SQL Server, которая удалит все строки в таблице, выполнит ее из кода C # и запросит таблицу данных.

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

Я бы бросил таблицу, самый быстрый способ удалить все. Затем воссоздайте таблицу.

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

Поскольку вы используете базу данных SQL Server, я бы рекомендовал просто выполнить команду SQL "DELETE FROM " + dt.TableName.

...