DataView の変更 (ADO.NET)
更新 : November 2007
DataView を使用して、データ行を基になるテーブルに追加、削除、または変更できます。基になるテーブルのデータを DataView で変更できるかどうかは、DataView の 3 つのブール値プロパティで制御されます。この 3 つのプロパティとは、AllowNew、AllowEdit および AllowDelete です。これらのプロパティの既定値は true です。
AllowNew が true の場合は、DataView の AddNew メソッドを使用して DataRowView を新規に作成できます。DataRowView の EndEdit メソッドが呼び出されるまでは、新規に作成された行は基になる DataTable に追加されません。DataRowView の CancelEdit メソッドが呼び出されると、新規に作成された行は破棄されます。一度に編集できるのは、1 つの DataRowView だけです。保留中の行がある場合は、DataRowView の AddNew メソッドまたは BeginEdit メソッドを呼び出すと、保留中の行に対して EndEdit が暗黙的に呼び出されます。EndEdit が呼び出されると、基になる DataTable に対して変更が適用されます。適用された変更をコミットするには DataTable、DataSet、または DataRow の各オブジェクトの AcceptChanges メソッドを使用し、拒否するにはこれらのオブジェクトの RejectChanges メソッドを使用します。AllowNew が false の場合は、DataRowView の AddNew メソッドを呼び出すと例外がスローされます。
AllowEdit が true の場合は、DataRowView を使用すると DataRow の内容を変更できます。基になる行の変更内容を確定するには DataRowView.EndEdit を使用し、変更内容を取り消すには DataRowView.CancelEdit を使用します。一度に編集できるのは 1 行だけです。保留中の行がある場合は、DataRowView の AddNew メソッドまたは BeginEdit メソッドを呼び出すと、保留中の行に対して EndEdit が暗黙的に呼び出されます。EndEdit が呼び出されると、基になる DataRow の Current 行バージョンに対して変更が適用されます。適用された変更をコミットするには DataTable、DataSet、または DataRow の各オブジェクトの AcceptChanges メソッドを使用し、拒否するにはこれらのオブジェクトの RejectChanges メソッドを使用します。AllowEdit が false の場合は、DataView の値を変更しようとすると例外がスローされます。
既存の DataRowView の編集中でも、まだ確定されていない変更に関して、基になる DataTable のイベントが発生する場合があります。DataRowView に対して EndEdit と CancelEdit のどちらが呼び出されているかに関係なく、基になる DataRow に対して EndEdit を呼び出すと、確定されていない変更が適用され、CancelEdit を呼び出すと、確定されていない変更が取り消されます。
AllowDelete が true の場合は、DataView オブジェクトまたは DataRowView オブジェクトの Delete メソッドを使用して DataView の行を削除できます。DataView の行を削除すると、基になる DataTable から行が削除されます。後でこの削除操作をコミットするには AcceptChanges を使用し、拒否するには RejectChanges を使用します。AllowDelete が false の場合は、DataView または DataRowView の Delete メソッドを呼び出すと例外がスローされます。
次のコード サンプルは、DataView を使用して行を削除する機能を無効にし、DataView を使用して基になるテーブルに新しい行を追加します。
Dim custTable As DataTable = custDS.Tables("Customers")
Dim custView As DataView = custTable.DefaultView
custView.Sort = "CompanyName"
custView.AllowDelete = False
Dim newDRV As DataRowView = custView.AddNew()
newDRV("CustomerID") = "ABCDE"
newDRV("CompanyName") = "ABC Products"
newDRV.EndEdit()
DataTable custTable = custDS.Tables["Customers"];
DataView custView = custTable.DefaultView;
custView.Sort = "CompanyName";
custView.AllowDelete = false;
DataRowView newDRV = custView.AddNew();
newDRV["CustomerID"] = "ABCDE";
newDRV["CompanyName"] = "ABC Products";
newDRV.EndEdit();