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--このデータが漏らされないことを確認します.
  •     }   
  • }  
  •             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()はロールバックされ、ローの削除がキャンセルされます.