删除行后,为什么DataTable.Rows.Count不会更改?

时间:2017-09-20 09:32:46

标签: c# datatable

在我的项目中,我需要删除DataTable中的所有记录,所以我尝试了这段代码:

while (DataTable1.Rows.Count > 0)
    DataTable1.Rows[0].Delete();

但是这是一个无限循环,似乎在Delete()语句后Rows.Count没有变化。

看来记录仍在那里,但标记为删除 所以我改变了我的计数:

int count = DataTable1.Select("", "", DataViewRowState.CurrentRows).Count();

所以现在我可以像这样改变我的循环

int count = DataTable1.Select("","",DataViewRowState.CurrentRows).Count();
while (count > 0)
{
    DataTable1.Rows[0].Delete(); // THIS IS WRONG NOW
    count = DataTable1.Select("","",DataViewRowState.CurrentRows).Count();
}

现在计数会按预期倒计时,但现在我的Rows[0].Delete()语句出现问题。

它将一遍又一遍地删除同一行。

所以我的问题是,如何找到未删除的第一行并将其删除? 换句话说,评论的行//这是错误的我可以在那条线上使用什么?

或者有更好的方法吗?我尝试了DataTable1.Clear(),但在执行adapter.Update(DataTable1);

时不会生成删除语句

1 个答案:

答案 0 :(得分:2)

如果要标记所有删除的行,为什么不使用普通的foreach循环?

foreach(DataRow row in DataTable1.Rows) row.Delete();

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