Comparteix via


Ediciones de DataTable

Cuando realizas cambios en los valores de columna de DataRow, los cambios se colocan inmediatamente en el estado actual de la fila. DataRowState se establece entonces en Modificado, y los cambios se aceptan o rechazan usando los métodos AcceptChanges o RejectChanges de DataRow. DataRow También proporciona tres métodos que puede usar para suspender el estado de la fila mientras lo está editando. Estos métodos son BeginEdit, EndEdity CancelEdit.

Al modificar los valores de columna de DataRow directamente, el DataRow administra los valores de columna mediante las versiones de fila Current, Default y Original. Además de estas versiones de fila, los métodos BeginEdit, EndEdit y CancelEdit usan una cuarta versión de fila: Propuesta. Para obtener más información sobre las versiones de fila, consulte Estados de Fila y Versiones de Fila.

La Proposed versión de fila existe durante una operación de edición que comienza llamando a BeginEdit y que finaliza mediante EndEdit o CancelEdit, o llamando a AcceptChanges o RejectChanges.

Durante la operación de edición, puede aplicar la lógica de validación a columnas individuales evaluando el ProposedValue en el evento ColumnChanged del DataTable. El ColumnChanged evento contiene DataColumnChangeEventArgs que mantienen una referencia a la columna que está cambiando y a ProposedValue. Después de evaluar el valor propuesto, puede modificarlo o cancelar la edición. Cuando finaliza la edición, la fila sale del Proposed estado.

Puede confirmar las modificaciones llamando a EndEdit o puede cancelarlas llamando a CancelEdit. Tenga en cuenta que, aunque EndEdit confirma las modificaciones, DataSet no acepta realmente los cambios hasta que se llama a AcceptChanges. Tenga en cuenta también que si llama a AcceptChanges antes de finalizar la edición con EndEdit o CancelEdit, la edición finaliza y los valores de la fila Proposed se aceptan para las versiones de fila Current y Original. De la misma manera, llamar a RejectChanges finaliza la edición y descarta las versiones de fila Current y Proposed. Llamar a EndEdit o CancelEdit después de llamar a AcceptChanges o RejectChanges no tiene ningún efecto porque la edición ya ha finalizado.

En el ejemplo siguiente se muestra cómo usar BeginEdit con EndEdit y CancelEdit. En el ejemplo también se comprueba el ColumnChanged evento en ProposedValue y se decide si se cancela la edición.

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

Consulte también