Dela via


DataTable-redigeringar

När du gör ändringar i kolumnvärden i en DataRowplaceras ändringarna omedelbart i radens aktuella tillstånd. DataRowState Är sedan inställd på Ändrad och ändringarna accepteras eller avvisas med hjälp AcceptChanges av datarowens eller RejectChanges metoderna. DataRow innehåller också tre metoder som du kan använda för att pausa tillståndet för raden när du redigerar den. Dessa metoder är BeginEdit, EndEditoch CancelEdit.

När du ändrar kolumnvärdena i en DataRow direkt hanterar DataRow kolumnvärdena med hjälp av radversionerna Current, Default och Original . Förutom dessa radversioner använder metoderna BeginEdit, EndEdit och CancelEdit en fjärde radversion: Föreslagen. Mer information om radversioner finns i Radtillstånd och Radversioner.

Den föreslagna radversionen finns under en redigeringsåtgärd som börjar med att anropa BeginEdit och som slutar antingen med EndEdit eller CancelEdit, eller genom att anropa AcceptChanges eller RejectChanges.

Under redigeringsåtgärden kan du tillämpa valideringslogik på enskilda kolumner genom att utvärdera ProposedValue i händelsen ColumnChanged för DataTable. Händelsen ColumnChanged innehåller DataColumnChangeEventArgs som behåller en referens till kolumnen som ändras och till ProposedValue. När du har utvärderat det föreslagna värdet kan du antingen ändra det eller avbryta redigeringen. När redigeringen är klar flyttas raden från det föreslagna tillståndet.

Du kan bekräfta redigeringar genom att anropa EndEdit, eller så kan du avbryta dem genom att anropa CancelEdit. Observera att även om EndEdit bekräftar dina ändringar accepterar DataSet inte ändringarna förrän AcceptChanges anropas. Observera också att om du anropar AcceptChanges innan du har avslutat redigeringen med EndEdit eller CancelEdit avslutas redigeringen och de föreslagna radvärdena accepteras för både aktuella och ursprungliga radversioner. På samma sätt avslutar anropet RejectChanges redigeringen och tar bort radversionerna Aktuell och Föreslagen . Att anropa EndEdit eller CancelEdit efter att ha anropat AcceptChanges eller RejectChanges har ingen effekt eftersom redigeringen redan har avslutats.

I följande exempel visas hur du använder BeginEdit med EndEdit och CancelEdit. Exemplet kontrollerar även ProposedValue i händelsen ColumnChanged och avgör om redigeringen ska avbrytas .

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

Se även