为什么删除行后 DataTable.Rows.Count 没有改变?

Gui*_*doG 3 c# datatable

在我的项目中,我需要删除数据表中的所有记录,所以我尝试了以下代码:

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);

Tim*_*ter 5

如果您想将所有行标记为已删除,为什么不使用普通foreach循环呢?

foreach(DataRow row in DataTable1.Rows) row.Delete();
Run Code Online (Sandbox Code Playgroud)

Delete会将这一行标记为Deleted对 DataAdapter 很重要,他们将调用它们DeleteCommand从数据库中删除这一行。但它不会DataTable立即删除该行。如果您想将其从表中删除,请使用DataTable.Rows.RemoveAt(index).