0

DataTable から DataRows を削除したいと考えています。削除する行は、データ行リスト「wantDelete」にあります。例外のため、コードを修正してください:

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

例外は次のとおりです。

例外

どうもありがとうございました。

4

4 に答える 4

5

foreach は列挙子を使用し、列挙子は基になるコレクションを変更できないため、列挙中にコレクションを変更することはできません。

したがって、事前にフィルタリングした afor-loopまたは別の collection( ) を使用する必要があります。deleteItems

List<DataRow>)私はあなたがすでにそれを事前にフィルタリングしたことをあなたのコードで見ています(私はwantDeleteが

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

補足: から行をDataTable削除しても、DataAdapter? そのため、 を使用する必要がありますDataRow.Delete()

于 2012-06-20T20:06:22.650 に答える
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);   
        }

お役に立てれば ...

于 2012-06-20T20:24:48.220 に答える
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));
   }
}
于 2012-06-20T20:08:53.053 に答える
0

同じテーブルをループして削除しています。つまり、行が削除されると myTable.Rows が変更されるため、「ループ」を使用できません。テーブルを別のテーブルにコピーして削除します。(foreach は「コピー」テーブルをループし、「元の」テーブルから削除する必要があります)

于 2012-06-20T20:01:35.350 に答える