Compartir a través de


DataRow.BeginEdit Método

Definición

Inicia una operación de edición en un objeto DataRow.

public:
 void BeginEdit();
public void BeginEdit ();
member this.BeginEdit : unit -> unit
Public Sub BeginEdit ()

Excepciones

Se ha llamado al método dentro del evento RowChanging.

Se ha llamado al método en una fila eliminada.

Ejemplos

En el ejemplo se crea un objeto simple DataTable con uno DataColumn y cinco DataRow objetos, y .UniqueConstraint También RowChanged se agrega un controlador de eventos para supervisar cuándo cambia el valor de la fila. Después de invocar BeginEdit en las filas existentes, la restricción y el evento se deshabilitan temporalmente y se imprimen los valores originales y propuestos. BeginEdit Se invoca de nuevo para establecer dos filas en el mismo valor. Cuando EndEdit se llama a , se aplica en UniqueConstraint los valores idénticos.

private void DemonstrateRowBeginEdit()
{
    DataTable table = new DataTable("table1");
    DataColumn column = new
        DataColumn("col1",Type.GetType("System.Int32"));
    table.RowChanged+=new
        DataRowChangeEventHandler(Row_Changed);
    table.Columns.Add(column);

    // Add a UniqueConstraint to the table.
    table.Constraints.Add(new UniqueConstraint(column));

    // Add five rows.
    DataRow newRow;

    for(int i = 0;i<5; i++)
    {
        // RowChanged event will occur for every addition.
        newRow= table.NewRow();
        newRow[0]= i;
        table.Rows.Add(newRow);
    }
    // AcceptChanges.
    table.AcceptChanges();

    // Invoke BeginEdit on each.
    Console.WriteLine(
        "\n Begin Edit and print original and proposed values \n");
    foreach(DataRow row in table.Rows)
    {

        row.BeginEdit();
        row[0]=(int) row[0]+10;
        Console.Write("\table Original \table" +
            row[0, DataRowVersion.Original]);
        Console.Write("\table Proposed \table" +
            row[0,DataRowVersion.Proposed] + "\n");
    }
    Console.WriteLine("\n");
    // Accept changes
    table.AcceptChanges();
    // Change two rows to identical values after invoking BeginEdit.
    table.Rows[0].BeginEdit();
    table.Rows[1].BeginEdit();
    table.Rows[0][0]= 100;
    table.Rows[1][0]=100;
    try
    {
        /* Now invoke EndEdit. This will cause the UniqueConstraint
           to be enforced.*/
        table.Rows[0].EndEdit();
        table.Rows[1].EndEdit();
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}

private void Row_Changed(object sender,
    System.Data.DataRowChangeEventArgs e)
{
    DataTable table = (DataTable)  sender;
    Console.WriteLine("RowChanged " + e.Action.ToString()
        + "\table" + e.Row.ItemArray[0]);
}
Private Sub DemonstrateRowBeginEdit()
    Dim table As New DataTable("table1")
    Dim column As New DataColumn("col1", Type.GetType("System.Int32"))
    AddHandler table.RowChanged, AddressOf Row_Changed
    table.Columns.Add(column)

    ' Add a UniqueConstraint to the table.
    table.Constraints.Add(New UniqueConstraint(column))

    ' Add five rows.
    Dim newRow As DataRow
       
    Dim i As Integer
    For i = 0 To 4
        ' RowChanged event will occur for every addition.
        newRow = table.NewRow()
        newRow(0) = i
        table.Rows.Add(newRow)
    Next i

    ' AcceptChanges.
    table.AcceptChanges()

    ' Invoke BeginEdit on each.
    Console.WriteLine(ControlChars.Cr _
       & " Begin Edit and print original and proposed values " _
       & ControlChars.Cr)
    Dim row As DataRow
    For Each row In  table.Rows           
        row.BeginEdit()
        row(0) = CInt(row(0)) & 10
        Console.Write(ControlChars.Tab & " Original " & ControlChars.Tab _
           & row(0, DataRowVersion.Original).ToString())
        Console.Write(ControlChars.Tab & " Proposed " & ControlChars.Tab _
           & row(0, DataRowVersion.Proposed).ToString() & ControlChars.Cr)
    Next row
    Console.WriteLine(ControlChars.Cr)

    ' Accept changes
    table.AcceptChanges()

    ' Change two rows to identical values after invoking BeginEdit.
    table.Rows(0).BeginEdit()
    table.Rows(1).BeginEdit()
    table.Rows(0)(0) = 100
    table.Rows(1)(0) = 100
    Try
        ' Now invoke EndEdit. This will cause the UniqueConstraint
        ' to be enforced.
        table.Rows(0).EndEdit()
        table.Rows(1).EndEdit()
    Catch e As Exception
    ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
           e.GetType().ToString())
    End Try
End Sub

Private Sub Row_Changed _
(sender As Object, e As System.Data.DataRowChangeEventArgs)
    Dim table As DataTable = CType(sender, DataTable)
    Console.WriteLine("RowChanged " & e.Action.ToString() _
       & ControlChars.Tab & e.Row.ItemArray(0).ToString())
End Sub

Comentarios

Use el BeginEdit método para poner un elemento DataRow en modo de edición. En este modo, los eventos se suspenden temporalmente, lo que permite al usuario realizar cambios en más de una fila sin desencadenar reglas de validación. Por ejemplo, si debe asegurarse de que el valor de la columna para un importe total es igual a los valores de las columnas de débito y crédito de una fila, puede colocar cada fila en modo de edición para suspender la validación de los valores de fila hasta que el usuario intente confirmar los valores.

El BeginEdit método se llama implícitamente cuando el usuario cambia el valor de un control enlazado a datos; el EndEdit método se llama implícitamente al invocar el AcceptChanges método para el DataTable objeto . Mientras se encuentra en este modo de edición, DataRow almacena representaciones de los valores originales y nuevos propuestos. Por lo tanto, siempre que no se haya llamado al EndEdit método , puede recuperar la versión original o propuesta pasando o DataRowVersion.OriginalDataRowVersion.Proposed para el version parámetro de la Item[] propiedad . También puede cancelar las modificaciones en este momento invocando el CancelEdit método .

Para ver si la fila contiene un valor original o propuesto, llame al HasVersion método .

Nota

El BeginEdit método suspende temporalmente los RowChanging eventos, pero la delete operación no.

Se aplica a

Consulte también