DataRow.BeginEdit 方法

定义

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

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

例外

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

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

示例

该示例创建一个简单 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调用时, UniqueConstraint 将对相同的值强制实施。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

注解

使用 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当用户更改数据绑定控件的值时,将隐式调用方法; 在 EndEdit 调用对象的方法时,将隐式调用方法 AcceptChanges DataTableThe 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 尚未调用方法,就可以通过传递 DataRowVersion.Original 属性的或来检索原始版本或建议的版本 DataRowVersion.Proposed version Item[]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. 您还可以通过调用方法取消任何编辑。 CancelEditYou 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.

备注

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

适用于

另请参阅