DataRow オブジェクトからDataTable オブジェクトを削除するには、 オブジェクトの DataRowCollection メソッドと Delete オブジェクトの メソッドの 2 つのメソッドを使用できます。 Remove メソッドは DataRowCollection から DataRow を削除しますが、 メソッドは削除対象の行のみをマークします。Delete 実際の削除は、アプリケーションが AcceptChanges メソッドを呼び出すときに発生します。 Deleteを使用すると、実際に削除する前に、削除対象としてマークされている行をプログラムで確認できます。 行が削除対象としてマークされている場合、その RowState プロパティは Deleteに設定されます。
Delete オブジェクトを反復処理するときに、foreach ループでRemoveもDataRowCollectionも呼び出さないでください。 Delete または Remove はコレクションの状態を変更します。
DataSet およびリレーショナル データ ソースと共にまたは DataTable を使用する場合は、DataRow の Delete メソッドを使用して行を削除します。 Delete メソッドは、DataSet または DataTable で行を Deleted としてマークしますが、削除しません。 代わりに、 DataAdapter は Deleted としてマークされた行を検出すると、 DeleteCommand メソッドを実行してデータ ソースの行を削除します。 その後、 AcceptChanges メソッドを使用して行を完全に削除できます。 Remove を使用して行を削除すると、行はテーブルから完全に削除されますが、DataAdapter はデータ ソースの行を削除しません。
DataRowCollection の Remove メソッドは、次の例に示すように、DataRow を引数として受け取り、コレクションから削除します。
workTable.Rows.Remove(workRow)
workTable.Rows.Remove(workRow);
これに対し、次の例では、DataRow で Delete メソッドを呼び出して、その RowState を Deleted に変更する方法を示します。
workRow.Delete
workRow.Delete();
行が削除対象としてマークされ、DataTable オブジェクトの AcceptChanges メソッドを呼び出すと、その行は DataTable から削除されます。 一方、 RejectChanges を呼び出すと、 行の RowState は 削除済みとしてマークされる前の状態に戻ります。
注
DataRow の RowState が追加された場合(つまり、テーブルに追加されたばかりで、削除済みとしてマークされている場合)、テーブルから削除されます。