Using Row State Information

The RowState property is used by ADO.NET to track the changes that have been made to a DataRow, which allows changes made to the data while disconnected to be updated back to the data source. The RowState property indicates whether the row belongs to a table, and if it does, whether it’s newly inserted, modified, deleted, or unchanged since it was loaded.

The value of the RowState property can’t be set directly. ADO.NET sets the row state in response to actions that affect the DataRow. The AcceptChanges( ) and RejectChanges( ) methods, whether explicitly or implicitly called, both reset the RowState value for the row to Unchanged. The following code illustrates this idea:

// create a table with one column

DataTable dt = new DataTable();

dt.Columns.Add("MyColumn",  typeof(System.String));



// create a new row

DataRow row = dt.NewRow();        // RowState = Detached



// add the row to the table

dt.Rows.Add(row);                 // RowState = Added

dt.AcceptChanges();               // RowState = Unchanged



// modify the row

row["MyColumn"] = "MyFieldValue"; // RowState = Modified



// reject the changes

row.RejectChanges();              // RowState = Unchanged



// delete the row

row.Delete();                     // RowState = Deleted

row.AcceptChanges();              // row no longer exists