DataRow の削除

DataTable オブジェクトから DataRow オブジェクトを削除するには、DataRowCollection オブジェクトの Remove メソッドと DataRow オブジェクトの Delete メソッドの、2 つのメソッドを使用できます。 Remove メソッドでは DataRowCollection から DataRow が削除されるのに対し、Delete メソッドでは削除対象の行がマークされるだけです。 実際の削除は、アプリケーションで AcceptChanges メソッドを呼び出すと実行されます。 Delete を使用すると、行を実際に削除する前に、削除対象としてどの行がマークされているかをプログラムによってチェックできます。 削除対象としてマークされている行の RowState プロパティは、Delete に設定されています。

Delete オブジェクトを反復処理している間は、foreach ループで RemoveDataRowCollection も呼び出すことはできません。 Delete または Remove はコレクションの状態を変更します。

DataAdapter およびリレーショナル データ ソースに関連して DataSet または DataTable を使用するときは、DataRowDelete メソッドを使用して行を削除します。 Delete メソッドでは、DataSet または DataTable の行が Deleted としてマークされますが、その行は削除されません。 代わりに、DataAdapterDeleted としてマークされた行が検出されたときに、DeleteCommand メソッドが実行されて、データ ソースの該当する行が削除されます。 その後、AcceptChanges メソッドを使用して、その行を永続的に削除できます。 Remove を使用して行を削除すると、行はテーブルから完全に削除されますが、DataAdapter ではデータ ソースの行は削除されません。

次の例で示すように、DataRowCollectionRemove メソッドに引数として DataRow を渡すと、その行がコレクションから削除されます。

workTable.Rows.Remove(workRow)  
workTable.Rows.Remove(workRow);  

これに対して、次の例では、DataRowDelete メソッドを呼び出して、その RowStateDeleted に変更する方法を示します。

workRow.Delete  
workRow.Delete();  

行を削除対象としてマークしてから DataTable オブジェクトの AcceptChanges メソッドを呼び出すと、その行が DataTable から削除されます。 これに対して、RejectChanges を呼び出すと、行の RowState はその行が Deleted としてマークされる前の状態に戻ります。

Note

DataRowRowStateAdded である場合、つまりテーブルに行が追加された直後の状態の場合に、その行を Deleted としてマークすると、その行はテーブルから削除されます。

関連項目