共用方式為


資料表編輯

當您在DataRow中修改列值時,這些變更會立即反映在行的當前狀態中。 DataRowState 接著會被設定為 已修改,並且使用 AcceptChanges 方法或 RejectChanges 方法來接受或拒絕 DataRow 的變更。 DataRow 也提供三種方法,可讓您在編輯數據列時暫停數據列的狀態。 這些方法是 BeginEditEndEditCancelEdit

當您直接修改 DataRow 中的數據行值時, DataRow 會使用 CurrentDefaultOriginal 數據列版本來管理數據行值。 除了這些數據列版本之外, BeginEditEndEditCancelEdit 方法也會使用第四個數據列版本: 建議。 如需數據列版本的詳細資訊,請參閱 數據列狀態和數據列版本

提案列版本存在於編輯操作從呼叫 BeginEdit 開始時,並且可以在使用 EndEditCancelEdit 結束,或通過呼叫 AcceptChangesRejectChanges 進行結束。

在編輯作業期間,您可以藉由評估 DataTableColumnChanged 事件中的 ProposedValue,將驗證邏輯套用至個別數據行。 ColumnChanged 事件會保存 DataColumnChangeEventArgs,其會保留對正在變更的數據列的參考,以及對擬議值的參考。 評估建議的值之後,您可以修改或取消編輯。 編輯結束時,數據列會移出建議狀態。

您可以呼叫 EndEdit 來確認編輯,也可以呼叫 CancelEdit 來取消編輯。 請注意,雖然 EndEdit 確實確認您的編輯,但呼叫 AcceptChanges 之前,DataSet 實際上不會接受變更。 另請注意,如果您在結束編輯之前呼叫AcceptChanges,也就是說在EndEditCancelEdit 之前,編輯就會結束,而且目前原始數據列版本都會接受建議的數據列值。 同樣地,呼叫 RejectChanges 會結束編輯,並捨棄 目前版本建議版本 的列版本。 呼叫 AcceptChangesRejectChanges 之後呼叫 EndEditCancelEdit 沒有任何作用,因為編輯已經結束。

下列範例示範如何搭配 EndEditCancelEdit 使用 BeginEdit。 此範例也會檢查 ColumnChanged 事件中的 ProposedValue,並決定是否要取消編輯。

Dim workTable As DataTable = New DataTable  
workTable.Columns.Add("LastName", Type.GetType("System.String"))  
  
AddHandler workTable.ColumnChanged, _  
  New DataColumnChangeEventHandler(AddressOf OnColumnChanged)  
  
Dim workRow As DataRow = workTable.NewRow()  
workRow(0) = "Smith"  
workTable.Rows.Add(workRow)  
  
workRow.BeginEdit()  
' Causes the ColumnChanged event to write a message and cancel the edit.  
workRow(0) = ""
workRow.EndEdit()  
  
' Displays "Smith, New".  
Console.WriteLine("{0}, {1}", workRow(0), workRow.RowState)  
  
Private Shared Sub OnColumnChanged( _  
  sender As Object, args As DataColumnChangeEventArgs)  
  If args.Column.ColumnName = "LastName" Then  
    If args.ProposedValue.ToString() = "" Then  
      Console.WriteLine("Last Name cannot be blank.  Edit canceled.")  
      args.Row.CancelEdit()  
    End If  
  End If  
End Sub  
DataTable workTable  = new DataTable();  
workTable.Columns.Add("LastName", typeof(String));  
  
workTable.ColumnChanged +=
  new DataColumnChangeEventHandler(OnColumnChanged);  
  
DataRow workRow = workTable.NewRow();  
workRow[0] = "Smith";  
workTable.Rows.Add(workRow);  
  
workRow.BeginEdit();  
// Causes the ColumnChanged event to write a message and cancel the edit.  
workRow[0] = "";
workRow.EndEdit();  
  
// Displays "Smith, New".  
Console.WriteLine("{0}, {1}", workRow[0], workRow.RowState);
  
protected static void OnColumnChanged(  
  Object sender, DataColumnChangeEventArgs args)  
{  
  if (args.Column.ColumnName == "LastName")  
    if (args.ProposedValue.ToString() == "")  
    {  
      Console.WriteLine("Last Name cannot be blank. Edit canceled.");  
      args.Row.CancelEdit();  
    }  
}  

另請參閱