Deleting Rows

The Delete( ) method deletes rows from the DataTable. If the RowState is Added, the row is removed; otherwise the RowState of the existing DataRow is changed to Deleted. The row is permanently removed from the table only when AcceptChanges( ) is called on the row either explicitly or implicitly when the Update( ) method of the DataAdapter successfully updates the changes to the row back to the data source.

// delete the first row from the table

DataRow row = dt.Rows[0];

row.Delete();        // RowState changed to Deleted



row = dt.NewRow();

// ... code to set the data for the row



// add the row to the table

dt.Rows.Add(row);



// delete the row

row.Delete();        // Newly inserted row is removed from the table

When you iterate through the rows of a DataTable, it is important to remember that rows are only marked for deletion and are still present in the collection of rows for the table. If you might be accessing Deleted rows in the DataTable, you need to explicitly check the state of the row and ignore it if it is Deleted. This is shown in the following example:

// Iterate over the results (and ignore deleted rows).

foreach (DataRow dr in ds.Tables["Customers"].Rows)

{

    if (dr.RowState != DataRowState.Deleted)

    {

        // ... process the row

    }

}

If you try to access the current value of a field in a row that has been deleted, you’ll receive the RowNotInTableException or DeleteRowInacessibleException.

Get ADO.NET in a Nutshell now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.