[英]Why does the DataTable.Rows.Count not change after deleting rows?
在我的项目中,我需要删除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()
语句有Rows[0].Delete()
。
它将一遍又一遍删除同一行。
所以我的问题是,如何找到未删除的第一行并将其删除?
换句话说,用//注释的行现在不正确,我可以在该行使用什么?
还是有更好的方法来做到这一点? 我尝试了DataTable1.Clear(),但是在执行adapter.Update(DataTable1);
时不会生成delete语句adapter.Update(DataTable1);
如果要标记所有行已删除,为什么不使用普通的foreach
-loop?
foreach(DataRow row in DataTable1.Rows) row.Delete();
Delete
会将这一行标记为Deleted
,这对于DataAdapters很重要,它们将调用其DeleteCommand
来从数据库中删除该行。 但是它不会立即从DataTable
删除该行。 如果要从表中删除它,请使用DataTable.Rows.RemoveAt(index)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.