DataRow.BeginEdit Method

Definition

DataRow 对象启动编辑操作。Starts an edit operation on a DataRow object.

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

Exceptions

已在 RowChanging 事件中调用该方法。The method was called inside the RowChanging event.

对已删除的行调用该方法。The method was called upon a deleted row.

Examples

该示例创建一个简单的 DataTable,其中包含一个 DataColumn 和五个 DataRow 对象和一个 UniqueConstraintThe example creates a simple DataTable with one DataColumn and five DataRow objects, and a UniqueConstraint. 还添加了一个 RowChanged 事件处理程序,以便在行的值更改时进行监视。A RowChanged event handler is also added to monitor when the row's value is changing. 对现有行调用 BeginEdit 后,将暂时禁用约束和事件,并打印原始值和建议值。After invoking BeginEdit on the existing rows, the constraint and event are temporarily disabled and the original and proposed values are printed. 再次调用 BeginEdit,以将两行设置为相同的值。The BeginEdit is again invoked to set two rows to the same value. 调用 EndEdit 时,将对相同的值强制执行 UniqueConstraintWhen 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

Remarks

使用 BeginEdit 方法将 DataRow 置于编辑模式。Use the BeginEdit method to put a DataRow into edit mode. 在此模式下,事件会暂时挂起,使用户无需触发验证规则即可更改多行。In this mode, events are temporarily suspended, letting the user make changes to more than one row without triggering validation rules. 例如,如果您必须确保总计的列的值与行中的借方列和贷方列的值相等,则可以将每一行置于编辑模式,以挂起行值验证,直到用户尝试提交值。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.

当用户更改数据绑定控件的值时,将隐式调用 BeginEdit 方法;调用 DataTable 对象的 AcceptChanges 方法时,将隐式调用 EndEdit 方法。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. 在此编辑模式下,DataRow 存储原始值和新的建议值的表示形式。While in this edit mode, the DataRow stores representations of the original and new proposed values. 因此,只要未调用 EndEdit 方法,就可以通过为 Item[] 属性的 version 参数传递 DataRowVersion.OriginalDataRowVersion.Proposed 来检索原始版本或建议版本。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[] property. 您还可以通过调用 CancelEdit 方法,在此时取消任何编辑。You can also cancel any edits at this point by invoking the CancelEdit method.

若要查看行是否包含原始值或建议值,请调用 HasVersion 方法。To see if the row contains an original or proposed value, call the HasVersion method.

Note

BeginEdit 方法暂时挂起 RowChanging 事件,但 delete 操作不会。The BeginEdit method temporarily suspends RowChanging events, but the delete operation does not.

Applies to

See also