DataView の変更

DataView を使用して、データ行を基になるテーブルに追加、削除、または変更できます。 基になるテーブルのデータを DataView で変更できるかどうかは、DataView の 3 つのブール値プロパティで制御されます。 この 3 つのプロパティとは、AllowNewAllowEdit および AllowDelete です。 これらのプロパティの既定値は true です。

AllowNewtrue の場合は、DataViewAddNew メソッドを使用して新しい DataRowView を作成できます。 DataRowViewEndEdit メソッドが呼び出されるまで、基になる DataTable に新しい行が実際に追加されることはないことに注意してください。 DataRowViewCancelEdit メソッドが呼び出されると、新しい行は破棄されます。 また、一度に編集できる DataRowView は 1 つだけであることにも注意してください。 保留中の行がある間に、DataRowViewAddNew メソッドまたは BeginEdit メソッドを呼び出すと、保留中の行に対して EndEdit が暗黙的に呼び出されます。 EndEdit が呼び出されると、基になる DataTable に対して変更が適用されます。適用された変更をコミットするには DataTableDataSet、またはDataRow オブジェクトの AcceptChanges メソッドを使用し、拒否するにはこれらのオブジェクトの RejectChanges メソッドを使用します。 AllowNewfalse の場合は、DataRowViewAddNew メソッドを呼び出すと例外がスローされます。

AllowEdittrue の場合は、DataRowView を使用して DataRow の内容を変更できます。 基になる行の変更内容を確定するには DataRowView.EndEdit を使用し、変更内容を取り消すには DataRowView.CancelEdit を使用します。 一度に編集できるのは 1 行だけです。 保留中の行がある間に、DataRowViewAddNew メソッドまたは BeginEdit メソッドを呼び出すと、保留中の行に対して EndEdit が暗黙的に呼び出されます。 EndEdit が呼び出されると、基になる DataRowCurrent 行バージョンに対して変更が適用されます。適用された変更をコミットするには DataTableDataSet、または DataRow オブジェクトの AcceptChanges メソッドを使用し、拒否するにはこれらのオブジェクトの RejectChanges メソッドを使用します。 AllowEditfalse の場合、DataView の値を変更しようとすると、例外がスローされます。

既存の DataRowView の編集中でも、まだ確定されていない変更に関して、基になる DataTable のイベントが発生する場合があります。 DataRowView に対して EndEditCancelEdit のどちらが呼び出されているかに関係なく、基になる DataRow に対して EndEdit を呼び出すと、確定されていない変更が適用され、CancelEdit を呼び出すと、確定されていない変更が取り消されます。

AllowDeletetrue の場合は、DataView オブジェクトまたは DataRowView オブジェクトの Delete メソッドを使用して DataView から行を削除することができ、基になる DataTable から行が削除されます。 後でこの削除操作をコミットするには AcceptChanges を使用し、拒否するには RejectChanges を使用します。 AllowDeletefalse の場合は、DataView または DataRowViewDelete メソッドを呼び出すと例外がスローされます。

次のコード例では、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();  

関連項目