Bearbeitungen von "DataTable"
Wenn Sie Änderungen der Spaltenwerte in einer DataRow vornehmen, werden die Änderungen sofort im aktuellen Zustand der Zeile platziert. Der DataRowState wird dann auf Modified festgelegt, und die Änderungen werden mithilfe der AcceptChanges-Methode oder der RejectChanges-Methode der DataRow akzeptiert oder abgelehnt. Die DataRow stellt auch drei Methoden bereit, mit denen der Zustand der Zeile während der Bearbeitung ausgesetzt werden kann. Diese Methoden sind BeginEdit, EndEdit und CancelEdit.
Wenn Spaltenwerte direkt in einer DataRow geändert werden, verwaltet die 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: Proposed. Weitere Informationen finden Sie unter Zeilenzustände und Zeilenversionen.
Die Zeilenversion Proposed ist während eines Bearbeitungsvorgangs vorhanden, der mit dem Aufrufen von BeginEdit beginnt, und entweder mit dem Verwenden von EndEdit oder CancelEdit oder durch Aufrufen von AcceptChanges oder RejectChanges endet.
Während des Bearbeitungsvorgangs kann eine Validierungslogik auf einzelne Spalten angewandt werden, indem ProposedValue im ColumnChanged-Ereignis der DataTable ausgewertet wird. Das ColumnChanged-Ereignis enthält DataColumnChangeEventArgs, die einen Verweis auf die geänderte Spalte und auf den ProposedValue enthalten. Nachdem der vorgeschlagene Wert ausgewertet wurde, kann dieser Wert geändert oder die Bearbeitung abgebrochen werden. Nachdem die Bearbeitung abgeschlossen wurde, verlässt die Zeile den Zustand Proposed.
Bearbeitungen können durch das Aufrufen von EndEdit bestätigt werden, oder sie können durch Aufrufen von CancelEdit abgebrochen werden. Beachten Sie, dass EndEdit die Bearbeitungen bestätigt, und das DataSet die Änderungen erst akzeptiert, wenn AcceptChanges aufgerufen wird. Beachten Sie außerdem Folgendes: Wenn Sie AcceptChanges aufrufen, bevor die Bearbeitung mit EndEdit oder CancelEdit abgeschlossen wurde, wird die Bearbeitung abgeschlossen und die Proposed-Zeilenwerte für die Zeilenversionen Current und Original werden akzeptiert. Auf die gleiche Weise beendet das Aufrufen von RejectChanges die Bearbeitung und verwirft die Zeilenversionen Current und Proposed. Das Aufrufen von EndEdit oder CancelEdit nach dem Aufrufen von AcceptChanges oder RejectChanges hat keine Auswirkungen, da die Bearbeitung bereits abgeschlossen wurde.
Das folgende Beispiel veranschaulicht, wie BeginEdit mit EndEdit und CancelEdit verwendet wird. Im Beispiel wird auch der ProposedValue im ColumnChanged-Ereignis überprüft und entschieden, ob die Bearbeitung abgebrochen werden soll.
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();
}
}