Freigeben über


DataTable-Bearbeitungen

Wenn Sie Änderungen an Spaltenwerten in einer DataRowSpalte vornehmen, werden die Änderungen sofort im aktuellen Zustand der Zeile platziert. Der DataRowState wird dann auf "Geändert" festgelegt, und die Änderungen werden mit den Methoden AcceptChanges oder RejectChanges von DataRow akzeptiert oder abgelehnt. DataRow bietet auch drei Methoden, mit denen Sie den Zustand der Zeile während der Bearbeitung anhalten können. Diese Methoden sind BeginEdit, EndEditund CancelEdit.

Wenn Sie Spaltenwerte in einem DataRow-Element direkt ändern, verwaltet DataRow die Spaltenwerte mithilfe der Zeilenversionen "Current", "Default" und " Original ". Zusätzlich zu diesen Zeilenversionen verwenden die Methoden BeginEdit, EndEdit und CancelEdit eine vierte Zeilenversion: Vorgeschlagen. Weitere Informationen zu Zeilenversionen finden Sie unter Zeilenzustände und Zeilenversionen.

Die vorgeschlagene Zeilenversion ist während eines Bearbeitungsvorgangs vorhanden, der mit dem Aufrufen von "BeginEdit " beginnt und entweder mit "EndEdit " oder "CancelEdit " endet, oder durch Aufrufen von AcceptChanges oder RejectChanges.

Während des Bearbeitungsvorgangs können Sie die Gültigkeitsprüfungslogik auf einzelne Spalten anwenden, indem Sie den ProposedValue im ColumnChanged-Ereignis der DataTable auswerten. Das ColumnChanged-Ereignis enthält DataColumnChangeEventArgs , die einen Verweis auf die zu ändernde Spalte und auf den ProposedValue beibehalten. Nachdem Sie den vorgeschlagenen Wert ausgewertet haben, können Sie ihn entweder ändern oder die Bearbeitung abbrechen. Wenn die Bearbeitung beendet ist, wird die Zeile aus dem Status "Vorgeschlagen " verschoben.

Sie können Bearbeitungen bestätigen, indem Sie EndEdit aufrufen, oder Sie können sie abbrechen, indem Sie CancelEdit aufrufen. Beachten Sie, dass EndEdit ihre Änderungen zwar bestätigt, aber das DataSet akzeptiert die Änderungen erst, wenn AcceptChanges aufgerufen wird. Beachten Sie auch, dass die Bearbeitung beendet wird, wenn Sie "AcceptChanges" aufrufen, bevor Sie die Bearbeitung mit "EndEdit " oder "CancelEdit" beendet haben, und die Zeilenwerte " Vorgeschlagen " werden sowohl für die Versionen " Aktuell" als auch " Original " akzeptiert. Auf die gleiche Weise beendet der Aufruf von RejectChanges die Bearbeitung und verwirft die Aktuelle und Vorgeschlagene Zeilenversionen. Das Aufrufen von EndEdit oder CancelEdit nach dem Aufrufen von AcceptChanges oder RejectChanges hat keine Auswirkung, da die Bearbeitung bereits beendet wurde.

Im folgenden Beispiel wird veranschaulicht, wie "BeginEdit " mit "EndEdit " und "CancelEdit" verwendet wird. Das Beispiel überprüft auch ProposedValue im ColumnChanged-Ereignis und trifft die Entscheidung, ob die Bearbeitung zu stornieren ist.

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();  
    }  
}  

Siehe auch