我想从DataTable中删除DataRows。要删除的行位于数据列表“wantDelete”中。 由于例外,请更正我的代码:
foreach (DataRow dr in myTable.Rows)
{
if (wantDelete.Contains(dr))
myTable.Rows.Remove(dr);
}
例外是:
非常感谢。
答案 0 :(得分:5)
您无法在枚举期间修改集合,因为foreach使用枚举器,而枚举器无法更改基础集合。
因此,您应该使用for-loop
或使用预先过滤的其他集合(deleteItems
)。
我在你的代码中看到你已经预先过滤了它(我假设wantDelete是List<DataRow>)
:
foreach (DataRow dr in wantDelete)
{
myTable.Rows.Remove(dr);
}
附注:您知道如果您使用DataTable
,从DataAdapter
删除行不会删除它们中的行吗?因此,您需要使用DataRow.Delete()
。
答案 1 :(得分:1)
在这种情况下不要使用foreach循环。使用整数迭代:
for (int I = myTable.Rows.Count - 1; I >= 0; I -= 1) {
if (wantDelete.Contains(myTable.Rows(I))) {
myTable.Rows.Remove(myTable.Rows(I));
}
}
答案 2 :(得分:1)
在迭代它所属的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);
}
希望这会有所帮助......
答案 3 :(得分:0)
您正在循环并删除相同的表..换句话说,删除行后myTable.Rows将更改,因此您不能使用“循环”。将表复制到另一个表并删除它。 (foreach应循环“复制”表并将其从“原始”表中删除)