Sdílet prostřednictvím


DataRow.BeginEdit Metoda

Definice

Spustí operaci úprav objektu DataRow .

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

Výjimky

Metoda byla volána uvnitř RowChanging události.

Metoda byla volána na odstraněný řádek.

Příklady

V příkladu se vytvoří jednoduchý DataTable objekt s jedním DataColumn a pěti DataRow objekty a objektem UniqueConstraint. Obslužná RowChanged rutina události je také přidána pro monitorování, když se hodnota řádku mění. Po vyvolání BeginEdit na existujících řádcích jsou omezení a událost dočasně zakázány a původní a navrhované hodnoty jsou vytištěny. Je BeginEdit znovu vyvolána, aby se dva řádky nastavily na stejnou hodnotu. Při EndEdit zavolání se UniqueConstraint vynutí hodnota u stejných hodnot.

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

Poznámky

BeginEdit Pomocí metody přepněte DataRow do režimu úprav. V tomto režimu jsou události dočasně pozastavené, takže uživatel může provádět změny ve více než jednom řádku bez aktivace ověřovacích pravidel. Pokud se například musíte ujistit, že hodnota sloupce pro celkovou částku je rovna hodnotám pro debetní a kreditní sloupce v řádku, můžete každý řádek převést do režimu úprav a pozastavit ověřování hodnot řádků, dokud se uživatel nepokusí potvrdit hodnoty.

Metoda BeginEdit je volána implicitně, když uživatel změní hodnotu ovládacího prvku vázaného na data; EndEdit metoda je volána implicitně, když vyvoláte metodu AcceptChangesDataTable pro objekt. V tomto režimu DataRow úprav ukládá reprezentace původních a nových navrhovaných hodnot. Proto, pokud EndEdit metoda nebyla volána, můžete načíst buď původní, nebo navrženou verzi předáním nebo DataRowVersion.OriginalDataRowVersion.Proposed pro version parametr Item[] vlastnosti. Všechny úpravy můžete v tomto okamžiku také zrušit vyvoláním CancelEdit metody .

Pokud chcete zjistit, jestli řádek obsahuje původní nebo navrhovanou hodnotu, zavolejte metodu HasVersion .

Poznámka

Metoda BeginEdit dočasně pozastaví RowChanging události, ale delete operace ne.

Platí pro

Viz také