c#foreachループdatatable指定条件に従って指定した行を削除
1695 ワード
C#で、DataTableのローを削除するには、次のような方法があります.
1,DataTableを使用する.Rows.Remove(DataRow)、またはDataTable.Rows.RemoveAt(index);行を直接削除できます
注記:DataTable.Rows.Remove(DataRow)改行が削除されると、テーブル全体のインデックスが再構築され、dataRowのindexとしてループを使用してテーブルにアクセスすると、削除するデータが削除されていないなどのエラーが発生します.これは、8行目、i++を削除した後に9行目のデータにアクセスしたが、9行目のデータが1行のデータを削除したため、インデックスが8の場合、アクセスが1行のデータを漏らしたためである.
ここに私が書いた例があります.
for(int i=0;i { if (!((lngX < 135.549864 && lngX > 73.27112) && (latY > 17.714548 && latY < 52.971885))) { history.Rows.Remove(history.Rows[i]); i-;//削除後、元のインデックスがi+1のローインデックスは、ローを削除することによってiになります.i--このデータが漏らされないことを確認します. } }
2,datatable.Rows[i].Delete().Delete()の後にdatatableが必要です.AccepteChanges()メソッドは、Delete()が対応する列のステータスフラグを削除するだけであるため、datatableでも完全削除を確認する.RejectChanges()はロールバックされ、ローの削除がキャンセルされます.
1,DataTableを使用する.Rows.Remove(DataRow)、またはDataTable.Rows.RemoveAt(index);行を直接削除できます
注記:DataTable.Rows.Remove(DataRow)改行が削除されると、テーブル全体のインデックスが再構築され、dataRowのindexとしてループを使用してテーブルにアクセスすると、削除するデータが削除されていないなどのエラーが発生します.これは、8行目、i++を削除した後に9行目のデータにアクセスしたが、9行目のデータが1行のデータを削除したため、インデックスが8の場合、アクセスが1行のデータを漏らしたためである.
ここに私が書いた例があります.
for (int i = 0; i < history.Rows.Count; i++)// Datatable Rows.count , , , , 。
{
if (!((lngX < 135.549864 && lngX > 73.27112) && (latY > 17.714548 && latY < 52.971885)))
{
history.Rows.Remove(history.Rows[i]);
i--;// i+1 i ,i--
}
}
2,datatable.Rows[i].Delete().Delete()の後にdatatableが必要です.AccepteChanges()メソッドは、Delete()が対応する列のステータスフラグを削除するだけであるため、datatableでも完全削除を確認する.RejectChanges()はロールバックされ、ローの削除がキャンセルされます.