DataRow の削除
DataTable オブジェクトから DataRow オブジェクトを削除するには、DataRowCollection オブジェクトの Remove メソッドと DataRow オブジェクトの Delete メソッドの、2 つのメソッドを使用できます。 Remove メソッドでは DataRowCollection から DataRow が削除されるのに対し、Delete メソッドでは削除対象の行がマークされるだけです。 実際の削除は、アプリケーションで AcceptChanges メソッドを呼び出すと実行されます。 Delete を使用すると、行を実際に削除する前に、削除対象としてどの行がマークされているかをプログラムによってチェックできます。 削除対象としてマークされている行の RowState プロパティは、Delete に設定されています。
Delete オブジェクトを反復処理している間は、foreach ループで Remove も DataRowCollection も呼び出すことはできません。 Delete または Remove はコレクションの状態を変更します。
DataAdapter およびリレーショナル データ ソースに関連して 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 はその行が Deleted としてマークされる前の状態に戻ります。
Note
DataRow の RowState が Added である場合、つまりテーブルに行が追加された直後の状態の場合に、その行を Deleted としてマークすると、その行はテーブルから削除されます。