修改 DataView

可以使用 DataView 在基础表中添加、删除或修改数据行。 通过设置 DataView 的三个布尔属性之一来控制使用 DataView 修改基础表中的数据的能力。 这三个属性是 AllowNewAllowEditAllowDelete。 默认设置为“true”。

如果 AllowNew 为“true”,则可以使用 DataView 的 AddNew 方法创建新的 DataRowView。 请注意,直到调用 DataRowView 的 EndEdit 方法,新行才被实际添加到基础 DataTable。 如果调用 DataRowView 的 CancelEdit 方法,新行将被丢弃。 还请注意,一次只能编辑一个 DataRowView。 当存在挂起的行时,如果你调用 DataRowView 的 AddNew 或 BeginEdit 方法,EndEdit 会隐式调用挂起的行。 调用 EndEdit 时,更改应用于基础 DataTable,并可以稍后使用 DataTable、DataSet 或 DataRow 对象的 AcceptChanges 或 RejectChanges 方法提交或拒绝。 如果 AllowNew 为 false,则当调用 DataRowView 的 AddNew 方法时,将引发异常。

如果 AllowEdit 为 true,可以通过 DataRowView 来修改 DataRow 的内容。 可以使用 DataRowView.EndEdit 确认对基础行的更改,或使用 DataRowView.CancelEdit 拒绝更改。 注意,一次只能编辑一行。 如果在存在挂起行时调用 DataRowView 的 AddNew 或 BeginEdit 方法,则会对该挂起行隐式调用 EndEdit。 当调用 EndEdit 时,建议更改将放置在基础 DataRow 的 Current 行版本中,随后可以使用 DataTable、DataSet 或 DataRow 对象的 AcceptChanges 或 RejectChanges 方法来提交或拒绝这些更改。 如果 AllowEdit 为 false,则尝试修改 DataView 中的值时,会引发异常。

当编辑现有 DataRowView 时,仍将引发基础 DataTable 的事件,并提供建议更改。 请注意,如果对基础 DataRow 调用 EndEdit 或 CancelEdit,那么无论是否对 DataRowView 调用 EndEdit 或 CancelEdit,都将应用或取消挂起的更改。

如果 AllowDelete 为 true,则可以使用 DataView 或 DataRowView 对象的 Delete 方法删除 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();  

请参阅