Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Po wprowadzeniu zmian w wartościach kolumn w elemencie DataRowzmiany są natychmiast umieszczane w bieżącym stanie wiersza. Właściwość DataRowState jest następnie ustawiona na Zmodyfikowano, a zmiany są akceptowane lub odrzucane przy użyciu metod AcceptChanges lub RejectChanges elementu DataRow. Ponadto DataRow udostępnia trzy metody, których można użyć do wstrzymania stanu wiersza podczas jego edytowania. Te metody to BeginEdit, EndEditi CancelEdit.
Podczas bezpośredniego modyfikowania wartości kolumn za pomocą DataRowDataRow, zarządzanie wartościami kolumn odbywa się przy użyciu wersji wierszy bieżących, domyślnych i Original. Oprócz tych wersji wierszy metody BeginEdit, EndEdit i CancelEdit używają czwartej wersji wiersza: Proponowane. Aby uzyskać więcej informacji na temat wersji wierszy, zobacz Row States and Row Versions (Stany wierszy i wersje wierszy).
Wersja Proposed wiersza istnieje podczas operacji edycji, która rozpoczyna się przez wywołanie BeginEdit i może zakończyć się przez użycie EndEdit lub CancelEdit, albo przez wywołanie AcceptChanges lub RejectChanges.
Podczas operacji edycji można zastosować logikę walidacji do poszczególnych kolumn, oceniając ProposedValue w zdarzeniu ColumnChanged obiektu DataTable. Zdarzenie ColumnChanged przechowuje DataColumnChangeEventArgs odwołanie do kolumny, która jest zmieniana, oraz na ProposedValue. Po dokonaniu oceny proponowanej wartości można ją zmodyfikować lub anulować edycję. Po zakończeniu edycji wiersz przechodzi poza Proposed stan.
Możesz potwierdzić edycje, wywołując metodę EndEdit lub anulować je, wywołując metodę CancelEdit. Należy pamiętać, że EndEdit potwierdza twoje edycje, ale DataSet nie akceptuje zmian, dopóki nie zostanie wywołany AcceptChanges. Należy również pamiętać, że jeśli wywołasz metodę AcceptChanges przed zakończeniem edycji za pomocą poleceń EndEdit lub AnulujEdytuj, edycja zostanie zakończona, a Proposed wartości wierszy zostaną zaakceptowane zarówno dla wersji wierszy Current, jak i Original. W taki sam sposób, wywołanie RejectChanges kończy edycję i odrzuca wersje wierszy Current i Proposed. Wywołanie EndEdit lub CancelEdit po wywołaniu AcceptChanges lub RejectChanges nie ma żadnego wpływu, ponieważ edycja została już zakończona.
W poniższym przykładzie pokazano, jak używać elementów BeginEdit z elementami EndEdit i CancelEdit. Przykład również sprawdza ProposedValue w zdarzeniu ColumnChanged i decyduje, czy anulować edycję.
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();
}
}