DataRow.BeginEdit DataRow.BeginEdit DataRow.BeginEdit DataRow.BeginEdit Method

Definizione

Avvia un'operazione di modifica su un oggetto DataRow.Starts an edit operation on a DataRow object.

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

Eccezioni

Il metodo è stato chiamato nell'evento RowChanging.The method was called inside the RowChanging event.

Il metodo è stato chiamato su una riga eliminata.The method was called upon a deleted row.

Esempi

Nell'esempio viene creato un DataTable oggetto semplice DataColumn con uno DataRow e cinque oggetti e UniqueConstraintun oggetto.The example creates a simple DataTable with one DataColumn and five DataRow objects, and a UniqueConstraint. Viene RowChanged inoltre aggiunto un gestore eventi per monitorare la modifica del valore della riga.A RowChanged event handler is also added to monitor when the row's value is changing. Una volta richiamate BeginEdit le righe esistenti, il vincolo e l'evento vengono temporaneamente disabilitati e vengono stampati i valori originali e quelli proposti.After invoking BeginEdit on the existing rows, the constraint and event are temporarily disabled and the original and proposed values are printed. BeginEdit Viene nuovamente richiamato per impostare due righe sullo stesso valore.The BeginEdit is again invoked to set two rows to the same value. Quando EndEdit viene chiamato il UniqueConstraint metodo, viene applicato per i valori identici.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

Commenti

Usare il BeginEdit metodo per DataRow attivare la modalità di modifica.Use the BeginEdit method to put a DataRow into edit mode. In questa modalità gli eventi vengono temporaneamente sospesi, consentendo all'utente di apportare modifiche a più righe senza attivare le regole di convalida.In this mode, events are temporarily suspended, letting the user make changes to more than one row without triggering validation rules. Se, ad esempio, è necessario assicurarsi che il valore della colonna per un importo totale sia uguale ai valori per le colonne di addebito e di credito in una riga, è possibile impostare ogni riga in modalità di modifica per sospendere la convalida dei valori di riga fino a quando l'utente non tenta di eseguire il commit dei valori.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.

Il BeginEdit metodo viene chiamato in modo implicito quando l'utente modifica il valore di un controllo con associazione a EndEdit dati. il metodo viene chiamato in modo implicito quando si DataTable richiama il AcceptChanges metodo per l'oggetto.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. In questa modalità di modifica, Archivia DataRow le rappresentazioni dei valori originali e nuovi proposti.While in this edit mode, the DataRow stores representations of the original and new proposed values. Pertanto, fino a quando il EndEdit metodo non è stato chiamato, è possibile recuperare la versione originale o proposta DataRowVersion.Original passando o DataRowVersion.Proposed per il version parametro della Item[String, DataRowVersion] proprietà.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. A questo punto è anche possibile annullare le modifiche richiamando il CancelEdit metodo.You can also cancel any edits at this point by invoking the CancelEdit method.

Per verificare se la riga contiene un valore originale o proposto, chiamare il HasVersion metodo.To see if the row contains an original or proposed value, call the HasVersion method.

Nota

Il BeginEdit metodo delete sospende temporaneamente gli eventi, ma l'operazione non viene eseguita. RowChangingThe BeginEdit method temporarily suspends RowChanging events, but the delete operation does not.

Si applica a

Vedi anche