我想从 DataTable 中删除 DataRows。要删除的行位于数据行列表“wantDelete”中。由于异常,请更正我的代码:
foreach (DataRow dr in myTable.Rows)
{
if (wantDelete.Contains(dr))
myTable.Rows.Remove(dr);
}
例外是:
非常感谢你。
我想从 DataTable 中删除 DataRows。要删除的行位于数据行列表“wantDelete”中。由于异常,请更正我的代码:
foreach (DataRow dr in myTable.Rows)
{
if (wantDelete.Contains(dr))
myTable.Rows.Remove(dr);
}
例外是:
非常感谢你。
您不能在枚举期间修改集合,因为 foreach 使用枚举器,而枚举器无法更改基础集合。
因此,您应该使用 a或使用您已预先过滤的for-loop
另一个 collection( )。deleteItems
我在您的代码中看到您已经对其进行了预过滤(我假设 wantDelete 是List<DataRow>)
:
foreach (DataRow dr in wantDelete)
{
myTable.Rows.Remove(dr);
}
旁注:DataTable
如果您使用的是,您知道从 a 中删除行不会在您的 dbms 中删除它们DataAdapter
?因此,您需要使用DataRow.Delete()
.
在这种情况下不要使用 foreach 循环。使用整数迭代:
for (int I = myTable.Rows.Count - 1; I >= 0; I -= 1) {
if (wantDelete.Contains(myTable.Rows(I))) {
myTable.Rows.Remove(myTable.Rows(I));
}
}
在迭代它所属的 DataTable 时,您不能删除 DataRow。因此,在迭代另一个 DataRows 列表时存储 DataRows 并将其删除,如下所示:
List<DataRow> rowsToDelete = new List<DataRow>();
foreach (DataRow dr in myTable.Rows)
{
if (wantDelete.Contains(dr))
{
rowsToDelete.Add(dr);
}
}
foreach (var dataRow in rowsToDelete)
{
myTable.Rows.Remove(dataRow);
}
希望这可以帮助 ...
您正在循环和删除同一个表..换句话说,删除行后 myTable.Rows 将发生变化,因此您不能在其上使用“循环”。将表复制到另一个表并将其删除。(foreach 应该循环“复制”表并将其从“原始”表中删除)