在我的项目中,我需要删除数据表中的所有记录,所以我尝试了以下代码:
while (DataTable1.Rows.Count > 0)
DataTable1.Rows[0].Delete();
Run Code Online (Sandbox Code Playgroud)
但这是一个无限循环,似乎在Delete()语句之后Rows.Count没有改变。
看起来记录仍然存在,但已标记为删除。
所以我将计数更改为:
int count = DataTable1.Select("", "", DataViewRowState.CurrentRows).Count();
Run Code Online (Sandbox Code Playgroud)
所以现在我可以像这样改变我的循环
int count = DataTable1.Select("","",DataViewRowState.CurrentRows).Count();
while (count > 0)
{
DataTable1.Rows[0].Delete(); // THIS IS WRONG NOW
count = DataTable1.Select("","",DataViewRowState.CurrentRows).Count();
}
Run Code Online (Sandbox Code Playgroud)
现在计数确实按预期倒计时,但现在我的声明有问题Rows[0].Delete()。
它将一遍又一遍地删除同一行。
所以我的问题是,如何找到第一行未删除的行,并将其删除?
换句话说,用 // THIS IS WRONG NOW 注释的行我可以在该行使用什么?
或者有更好的方法来做到这一点吗?我尝试了 DataTable1.Clear() 但在执行时不会生成删除语句adapter.Update(DataTable1);
如果您想将所有行标记为已删除,为什么不使用普通foreach循环呢?
foreach(DataRow row in DataTable1.Rows) row.Delete();
Run Code Online (Sandbox Code Playgroud)
Delete会将这一行标记为Deleted对 DataAdapter 很重要,他们将调用它们DeleteCommand从数据库中删除这一行。但它不会DataTable立即删除该行。如果您想将其从表中删除,请使用DataTable.Rows.RemoveAt(index).