从DataTable中删除DataRows

时间:2012-06-20 19:57:29

标签: c# collections datatable

我想从DataTable中删除DataRows。要删除的行位于数据列表“wantDelete”中。 由于例外,请更正我的代码:

foreach (DataRow dr in myTable.Rows)
{
     if (wantDelete.Contains(dr))
     myTable.Rows.Remove(dr);
}

例外是:

exception

非常感谢。

4 个答案:

答案 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应循环“复制”表并将其从“原始”表中删除)