9.5 Using Row Version Information
ADO.NET maintains up to three versions of each DataRow
object. The DataAdapter reconciles changes made
since the data was loaded from the data source, thereby making
changes to the disconnected data permanent. Two versions of each row
are maintained to allow the DataAdapter to
determine how to perform the reconciliation. The
Original version contains the values that were
loaded into the row. The
Current version contains the latest version of
the data, including the changes made since the data was originally
loaded. The Original version
isn't available for newly created rows.
ADO.NET also allows a row to be put into edit mode which temporarily
suspends events for the row and allows the user to make multiple
changes to the row without triggering validation rules. The
BeginEdit( ) method of the
DataRow puts the row into edit mode, while the
EndEdit( ) and CancelEdit(
) methods take the row out of edit mode.
AcceptChanges( ) also takes the row out of edit
mode because it implicitly calls EndEdit( ), as
does RejectChanges( ), which implicitly calls
CancelEdit( ).
A Proposed row version is made available while the
row is in edit mode and contains the changes that have been made to
the row while it was in edit mode. If the EndEdit(
) method is called, the changes made are copied from the
Proposed row to the Current
row. If the CancelEdit( ) method is called, the
values in the Proposed version are simply
discarded. In either case, once the editing is completed, the
Proposed version of the row is no longer
available.
Finally, a Default row version returns the
Current version if the row isn't
being edited or the Proposed row if it is.
The HasVersion( ) method of the DataRow
can determine whether a specific version of the row exists. If the
version exists, column values for it can be retrieved using one of
the three overloads of the DataRow indexer. The
following example shows how to check for and retrieve the
Proposed version of a row:
DataRow dr;
// ... code to build, fill, and modify the row
object objColVal;
// check if the Proposed version of the row exists
if (dr.HasVersion(DataRowVersion.Proposed))
{
// retrieve the value for the first column in the Proposed row
objColVal = dr[0, DataRowVersion.Proposed];
}
|