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 は列挙子を使用し、列挙子は基になるコレクションを変更できないため、列挙中にコレクションを変更することはできません。
したがって、事前にフィルタリングした afor-loop
または別の collection( ) を使用する必要があります。deleteItems
List<DataRow>)
私はあなたがすでにそれを事前にフィルタリングしたことをあなたのコードで見ています(私はwantDeleteが
foreach (DataRow dr in wantDelete)
{
myTable.Rows.Remove(dr);
}
補足: から行をDataTable
削除しても、DataAdapter
? そのため、 を使用する必要がありますDataRow.Delete()
。
含まれている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);
}
お役に立てれば ...
この場合、foreach ループを使用しないでください。整数反復を使用する:
for (int I = myTable.Rows.Count - 1; I >= 0; I -= 1) {
if (wantDelete.Contains(myTable.Rows(I))) {
myTable.Rows.Remove(myTable.Rows(I));
}
}
同じテーブルをループして削除しています。つまり、行が削除されると myTable.Rows が変更されるため、「ループ」を使用できません。テーブルを別のテーブルにコピーして削除します。(foreach は「コピー」テーブルをループし、「元の」テーブルから削除する必要があります)