Delen via


Gegevenstabelbewerkingen

Wanneer u wijzigingen aanbrengt in kolomwaarden in een DataRow, worden de wijzigingen onmiddellijk in de huidige status van de rij geplaatst. De DataRowState wordt vervolgens ingesteld op Gewijzigd, en de wijzigingen worden geaccepteerd of afgewezen met behulp van de AcceptChanges of RejectChanges methoden van DataRow. Het DataRow biedt ook drie methoden die u kunt gebruiken om de status van de rij op te schorten terwijl u deze bewerkt. Deze methoden zijn BeginEdit, EndEditen CancelEdit.

Wanneer u kolomwaarden rechtstreeks in een DataRow wijzigt, beheert de DataRow de kolomwaarden met de rijversies Huidig, Standaard en Original. Naast deze rijversies gebruiken de methoden BeginEdit, EndEdit en CancelEdit methoden een vierde rijversie: Voorgesteld. Meer informatie over rijversies vindt u in Rijstatussen en rijversies.

De Proposed rijversie bestaat tijdens een bewerking die begint met aanroepen BeginEdit en die eindigt met behulp van EndEdit of CancelEdit, of door aanroepen AcceptChanges of Negeren.

Tijdens de bewerking kunt u validatielogica toepassen op afzonderlijke kolommen door het ProposedValue in het ColumnChanged geval van de gegevenstabel te evalueren. De ColumnChanged gebeurtenis houdt DataColumnChangeEventArgs die een verwijzing naar de kolom die wordt gewijzigd en naar de VoorgesteldeWaarde behouden. Nadat u de voorgestelde waarde hebt geëvalueerd, kunt u deze wijzigen of de bewerking annuleren. Wanneer de bewerking is beëindigd, wordt de rij uit de Proposed staat verplaatst.

U kunt bewerkingen bevestigen door EndEdit aan te roepen of u kunt ze annuleren door CancelEdit aan te roepen. Houd er rekening mee dat terwijl EndEdit u uw wijzigingen bevestigt, de DataSet wijzigingen pas daadwerkelijk worden geaccepteerd als AcceptChanges ze worden aangeroepen. Houd er ook rekening mee dat als u aanroept AcceptChanges voordat u de bewerking met EndEdit of CancelEdit hebt beëindigd, de bewerking wordt beëindigd en dat de Proposed rijwaarden worden geaccepteerd voor zowel de CurrentOriginal als rijversies. Op dezelfde manier beëindigt het aanroepen van RejectChanges de bewerking en verwijdert het de rijversies van Current en Proposed. Bellen EndEdit of CancelEdit na bellen AcceptChanges of RejectChanges heeft geen effect omdat de bewerking al is beëindigd.

In het volgende voorbeeld ziet u hoe u deze kunt gebruiken BeginEdit met EndEdit en CancelEdit. In het voorbeeld wordt ook de ProposedValue in de ColumnChanged gebeurtenis gecontroleerd en bepaald of de aanpassing moet worden geannuleerd.

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

Zie ook