asp.net

AcceptChanges 方法

2011-03-15

DataRow 和 DataTable 类都具有 AcceptChanges 方法。在 DataTable 级别调用 AcceptChanges,会为要调用的每个 DataRow 导致 AcceptChanges 方法。同样,对 DataSet 调用 AcceptChanges 会导致对 DataSet 中的每个表调用 AcceptChanges。照这样,您可在多个级别上调用该方法。调用 DataSet 的 AcceptChanges 将使您只需调用一次,即可对所有次级对象(例如表和行)调用该方法。

当对 DataSet 调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。每个 DataRow 的 RowState 属性也会更改;Added 和 Modified 行变为 Unchanged,而 Deleted 行则被移除。

如果 DataSet 包含 ForeignKeyConstraint 对象,则调用 AcceptChanges 方法还将导致实施 AcceptRejectRule。

 

下面的示例将 DataRow 添加到 DataSet 的 DataTable 中。然后针对 DataSet 调用 AcceptChanges 方法,该数据集将级联到它包含的所有 DataTable 对象。

private void AcceptChanges()
{
   DataSet myDataSet;
   myDataSet = new DataSet();

   // Not shown: methods to fill the DataSet with data.
   DataTable t;
   t = myDataSet.Tables["Suppliers"];

   // Add a DataRow to a table.
   DataRow myRow;
   myRow = t.NewRow();
   myRow["CompanyID"] = "NWTRADECO";
   myRow["CompanyName"] = "NortWest Trade Company";

   // Add the row.
   t.Rows.Add( myRow );

   // Calling AcceptChanges on the DataSet causes AcceptChanges to be
   // called on all subordinate objects.
   myDataSet.AcceptChanges();
}

 注意:datatable的每一列都有个状态。忘记有哪些了。如果是改变过的,在update的时候就会跟据修改过的那些资料去修改数据库,没有修改的不动。如果调用了acceptchanges,这些改变后的状态都会被置为未改变。因此update的时候,就不会修改数据库。