.NET Framework Class Library
DataRow..::.BeginEdit Method

Starts an edit operation on a DataRow object.

Namespace:  System.Data
Assembly:  System.Data (in System.Data.dll)
Syntax

Visual Basic (Declaration)
Public Sub BeginEdit
Visual Basic (Usage)
Dim instance As DataRow

instance.BeginEdit()
C#
public void BeginEdit()
Visual C++
public:
void BeginEdit()
JScript
public function BeginEdit()
Exceptions

ExceptionCondition
InRowChangingEventException

The method was called inside the RowChanging event.

DeletedRowInaccessibleException

The method was called upon a deleted row.

Remarks

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.

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. While in this edit mode, the DataRow stores representations of the original and new proposed values. 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. You can also cancel any edits at this point by invoking the CancelEdit method.

To see if the row contains an original or proposed value, call the HasVersion method.

NoteNote:

The BeginEdit method temporarily suspends RowChanging events, but the delete operation does not.

Examples

The example creates a simple DataTable with one DataColumn and five DataRow objects, and a UniqueConstraint. A RowChanged event handler is also added to monitor when the row's value is changing. After invoking BeginEdit on the existing rows, the constraint and event are temporarily disabled and the original and proposed values are printed. The BeginEdit is again invoked to set two rows to the same value. When EndEdit is called, the UniqueConstraint is enforced on the identical values.

Visual Basic
 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
C#
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]);
}
Platforms

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360, Zune

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Version Information

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 3.5, 2.0, 1.0

XNA Framework

Supported in: 3.0, 2.0, 1.0
See Also

Reference

Other Resources

Tags :


Page view tracker