如何从数据表中删除所有行

时间:2011-04-19 12:02:05

标签: c# sql-server datatable rowstate

我想从rowstate属性值Deleted删除数据表中的所有行。

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

目前,我正在遍历所有行并删除每一行。

有没有有效的方法? 我不想在SQL Server中删除我想使用DataTable方法。


9 个答案:

答案 0 :(得分:4)

我们正在使用这种方式:

for(int i = table.Rows.Count - 1; i >= 0; i--) {
    DataRow row = table.Rows[i];
    if ( row.RowState == DataRowState.Deleted ) { table.Rows.RemoveAt(i); }
}

答案 1 :(得分:3)

这将满足任何FK级联关系,例如'delete'(DataTable.Clear()不会):

DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
     dt.Rows[0].Delete();
}

答案 2 :(得分:2)

dt.Rows.Clear();
dt.Columns.Clear();   //warning: All Columns delete
dt.Dispose();

答案 3 :(得分:0)

由于您使用的是SQL Server数据库,我建议您只需执行SQL命令"DELETE FROM " + dt.TableName

答案 4 :(得分:0)

我会删除表格,删除所有内容的最快方法。然后重新创建表格。

答案 5 :(得分:0)

您可以在SQL Server数据库上创建一个存储过程,删除表中的所有行,从C#代码执行它,然后重新查询数据表。

答案 6 :(得分:0)

我小心地执行以下SQL命令:

DELETE FROM TABLE WHERE ID>0

答案 7 :(得分:0)

这是我在寻找这个问题之后在我自己的代码中找到的解决方案,从Jorge的答案中获取灵感。

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设置为Deleted。

此外,由于在枚举时修改了集合,因此不会获得InvalidOperationException,因为未使用foreach。但是,Jorge的解决方案易受攻击的无限循环错误在这里不是问题,因为代码将增加超过其DataRowState已被设置为已删除的DataRow。

答案 8 :(得分:0)

删除数据表中的所有行

$("id/Class tbody").empty();

示例

<table id="table1">
     <thead>
         <th></th>
     </thead>
     <tbody>
         <td></td>
     </tbody>    
</table>

code : $("#table1 tbody").empty()

;