Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando se cambian los valores de las columnas en una DataRow, los cambios se sitúan inmediatamente en el estado actual de la fila. A continuación, el DataRowState se establece en Modified y los cambios se aceptan o se rechazan mediante los métodos AcceptChanges o RejectChanges de la DataRow. DataRow proporciona también tres métodos que se pueden usar para suspender el estado de la fila mientras se está editando. Estos métodos son BeginEdit, EndEdit y CancelEdit.
Cuando se modifican los valores de columna de una DataRow directamente, 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 utilizan una cuarta versión de fila: Proposed. Para obtener más información sobre versiones de fila, vea Estados de fila y versiones de fila.
La versión de fila Proposed propuesta existe mientras dura una operación de edición que se inicia llamando a BeginEdit y finaliza mediante EndEdit o CancelEdit, o bien llamando a AcceptChanges o RejectChanges.
Durante la operación de edición se puede aplicar la lógica de validación a las columnas individualmente evaluando el ProposedValue del evento ColumnChanged de la DataTable. El evento ColumnChanged contiene DataColumnChangeEventArgs que guardan una referencia a la columna que se está cambiando y al ProposedValue. Después de evaluar el valor propuesto, se puede modificar o cancelar la edición. Cuando termina la operación de edición, la fila abandona el estado de Proposed.
Las modificaciones se pueden confirmar llamando a EndEdit o cancelar llamando a CancelEdit. Tenga en cuenta que aunque EndEdit confirma las modificaciones, DataSet no las acepta realmente hasta que se llama a AcceptChanges. También hay que tener en cuenta que si se llama a AcceptChanges antes de finalizar la operación de edición con EndEdit o CancelEdit, dicha edición finaliza y los valores de fila Proposed se aceptan en las dos versiones de fila: Current y Original. De la misma manera, si se llama a RejectChanges, se finaliza la edición y se descartan las versiones de fila Current y Proposed. Una llamada 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 se utilizan BeginEdit con EndEdit y CancelEdit. En el ejemplo también se comprueba el ProposedValue del evento ColumnChanged y se decide si cancelar 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();
}
}
Vea también
Referencia
Conceptos
Control de eventos DataTable (ADO.NET)