Udostępnij za pośrednictwem


Edycje elementu DataTable

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 Wartość Zmodyfikowano, a zmiany są akceptowane lub odrzucane przy użyciu AcceptChanges metod lub RejectChanges elementu DataRow. Funkcja DataRow udostępnia również 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 w elemencie DataRow funkcja DataRow zarządza wartościami kolumn przy użyciu wersji bieżących, domyślnych i oryginalnych wierszy. 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 proponowanego wiersza istnieje podczas operacji edycji, która rozpoczyna się przez wywołanie BeginEdit i kończy się przy użyciu endEdit lub CancelEdit albo przez wywołanie AcceptChanges lub RejectChanges.

Podczas operacji edycji można zastosować logikę walidacji do poszczególnych kolumn, oceniając wartość ProposedValue w zdarzeniu ColumnChanged tabeli DataTable. Zdarzenie ColumnChanged zawiera wartości DataColumnChangeEventArgs , które zachowują odwołanie do zmieniającej się kolumny i proponowanej wartości. Po dokonaniu oceny proponowanej wartości można ją zmodyfikować lub anulować edycję. Po zakończeniu edycji wiersz przechodzi z stanu Proponowane .

Możesz potwierdzić edycje, wywołując metodę EndEdit lub anulować je, wywołując metodę CancelEdit. Należy pamiętać, że chociaż element EndEdit potwierdza zmiany, zestaw danych nie akceptuje zmian do momentu wywołania metody AcceptChanges . Pamiętaj również, że jeśli wywołasz metodę AcceptChanges przed zakończeniem edycji za pomocą elementu EndEdit lub CancelEdit, edycja zostanie zakończona, a proponowane wartości wierszy zostaną zaakceptowane zarówno dla wersji bieżących , jak i oryginalnych wierszy. W ten sam sposób wywołanie metody RejectChanges kończy edycję i odrzuca wersje bieżących i proponowanych wierszy. Wywołanie metody EndEdit lub CancelEdit po wywołaniu metody AcceptChanges lub RejectChanges nie ma wpływu, ponieważ edycja została już zakończona.

W poniższym przykładzie pokazano, jak używać metody BeginEdit z elementami EndEdit i CancelEdit. Przykład sprawdza również wartość 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();  
    }  
}  

Zobacz też