DataRow.BeginEdit Método

Definição

Inicia uma operação de edição em um objeto DataRow.Starts an edit operation on a DataRow object.

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

Exceções

O método foi chamado dentro do evento RowChanging.The method was called inside the RowChanging event.

O método foi chamado em uma linha excluída.The method was called upon a deleted row.

Exemplos

O exemplo cria um simples DataTable com um DataColumn e cinco DataRow objetos e um UniqueConstraint.The example creates a simple DataTable with one DataColumn and five DataRow objects, and a UniqueConstraint. Um RowChanged manipulador de eventos também é adicionado para monitorar quando o valor da linha está sendo alterado.A RowChanged event handler is also added to monitor when the row's value is changing. Depois de invocar BeginEdit as linhas existentes, a restrição e o evento são temporariamente desabilitados e os valores originais e propostos são impressos.After invoking BeginEdit on the existing rows, the constraint and event are temporarily disabled and the original and proposed values are printed. O BeginEdit é invocado novamente para definir duas linhas com o mesmo valor.The BeginEdit is again invoked to set two rows to the same value. Quando EndEdit é chamado, o UniqueConstraint é imposto sobre os valores idênticos.When EndEdit is called, the UniqueConstraint is enforced on the identical values.

   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

Comentários

Use o BeginEdit método para colocar um DataRow no modo de edição.Use the BeginEdit method to put a DataRow into edit mode. Nesse modo, os eventos são temporariamente suspensos, permitindo que o usuário faça alterações em mais de uma linha sem disparar regras de validação.In this mode, events are temporarily suspended, letting the user make changes to more than one row without triggering validation rules. Por exemplo, se você deve certificar-se de que o valor da coluna para um valor total é igual aos valores das colunas de débito e crédito em uma linha, você pode colocar cada linha no modo de edição para suspender a validação dos valores de linha até que o usuário tente confirmar os valores.For example, if you must make sure that the value of the column for a total amount is equal to the values for the debit and credit columns in a row, you can put each row into edit mode to suspend the validation of the row values until the user tries to commit the values.

O BeginEdit método é chamado implicitamente quando o usuário altera o valor de um controle associado a dados; o EndEdit método é chamado implicitamente quando você invoca o AcceptChanges método para o DataTable objeto.The BeginEdit method is called implicitly when the user changes the value of a data-bound control; the EndEdit method is called implicitly when you invoke the AcceptChanges method for the DataTable object. Enquanto estiver nesse modo de edição, DataRow o armazena representações dos valores de proposta original e novo.While in this edit mode, the DataRow stores representations of the original and new proposed values. Portanto, desde que o EndEdit método não tenha sido chamado, você pode recuperar a versão original ou proposta passando um DataRowVersion.Original ou DataRowVersion.Proposed para o version parâmetro da Item[String, DataRowVersion] propriedade.Therefore, as long as the EndEdit method has not been called, you can retrieve either the original or proposed version by passing either DataRowVersion.Original or DataRowVersion.Proposed for the version parameter of the Item[String, DataRowVersion] property. Você também pode cancelar todas as edições neste ponto invocando o CancelEdit método.You can also cancel any edits at this point by invoking the CancelEdit method.

Para ver se a linha contém um valor original ou proposto, chame o HasVersion método.To see if the row contains an original or proposed value, call the HasVersion method.

Observação

O BeginEdit delete métodoRowChanging Suspende temporariamente os eventos, mas a operação não faz isso.The BeginEdit method temporarily suspends RowChanging events, but the delete operation does not.

Aplica-se a

Veja também