Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 an, mit denen Sie den Status der Zeile während der Bearbeitung anhalten können. Diese Methoden sind BeginEdit, EndEditund CancelEdit.
Wenn Sie Spaltenwerte direkt DataRow ändern, werden die DataRow Spaltenwerte mithilfe der Versionen "Current", "Default" und Original "Row" verwaltet. Zusätzlich zu diesen Zeilenversionen verwenden die BeginEdit, EndEdit und CancelEdit Methoden eine vierte Zeilenversion: Vorgeschlagen. Weitere Informationen zu Zeilenversionen finden Sie unter Zeilenzustände und Zeilenversionen.
Die Proposed Zeilenversion ist während eines Bearbeitungsvorgangs vorhanden, der mit dem Aufrufen BeginEdit beginnt und entweder mithilfe EndEdit oder CancelEdit endet, oder durch Aufrufen AcceptChanges oder RejectChanges.
Während des Bearbeitungsvorgangs können Sie die Validierungslogik auf einzelne Spalten anwenden, indem Sie ProposedValue im ColumnChanged-Ereignis der Datentabelle auswerten. Das ColumnChanged Ereignis enthält DataColumnChangeEventArgs einen Verweis auf die Spalte, die sich ändert, und auf den Vorgeschlagenen Wert. Nachdem Sie den vorgeschlagenen Wert ausgewertet haben, können Sie ihn entweder ändern oder die Bearbeitung abbrechen. Wenn die Bearbeitung beendet ist, verschiebt sich die Zeile aus dem Proposed Zustand.
Sie können Bearbeitungen bestätigen, indem Sie EndEdit aufrufen, oder Sie können sie abbrechen, indem Sie CancelEdit aufrufen. Beachten Sie, dass, obwohl EndEdit Ihre Änderungen bestätigt, DataSet die Änderungen erst akzeptiert, wenn AcceptChanges aufgerufen wird. Beachten Sie auch, dass beim Aufrufen von AcceptChanges, bevor Sie die Bearbeitung mit EndEdit oder CancelEdit beendet haben, die Bearbeitung abgeschlossen wird und die Proposed Zeilenwerte sowohl für die Current- als auch für die Original-Zeilenversionen akzeptiert werden. Auf die gleiche Weise beendet der Aufruf RejectChanges die Bearbeitung und verwirft die Current und Proposed Versionen der Zeile. Nach dem Aufrufen von EndEdit oder CancelEdit nach AcceptChanges oder RejectChanges hat dies keine Auswirkung, da die Bearbeitung bereits beendet wurde.
Das folgende Beispiel veranschaulicht die Verwendung BeginEdit mit EndEdit und CancelEdit. Das Beispiel überprüft außerdem das ProposedValue im ColumnChanged Ereignis und entscheidet, 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();
}
}