回滚自创建 DataSet 以来或上次调用 DataSet.AcceptChanges 以来对其进行的所有更改。
调用 DataSet.RejectChanges 以针对由 DataSet 包含的所有 DataTable 对象调用 DataTable.RejectChanges 方法。
由 DataSet 包含的每个 DataRow 对象都可通过调用 DataRow.BeginEdit 方法设置为编辑模式。 在调用 DataRow.EndEdit 方法之后,可通过针对 DataRow 对象所属的 DataTable 调用 DataTable.RejectChanges 来拒绝更改。
DataTable.RejectChanges 方法被调用时,仍处于编辑模式的任何行将取消其编辑。 新行被移除。 已修改的和已删除的行返回到其原始状态 (DataRowState.Unchanged)。
AcceptChanges 和 RejectChanges 仅适用于与 DataRow 相关的更改,即 Add、Remove、Delete 和 Modify。 它们不适用于架构和结构方面的更改。
代码如下(程序集:System.Data(在 system.data.dll 中)):
public void RejectChanges()
{
IntPtr intPtr;
Bid.ScopeEnter(out intPtr, " %d#\n", this.ObjectID);
try
{
if (this.RowState != DataRowState.Detached)
{
if (this._columns.ColumnsImplementingIChangeTrackingCount != this._columns.ColumnsImplementingIRevertibleChangeTrackingCount)
{
DataColumn[] columnsImplementingIChangeTracking = this._columns.ColumnsImplementingIChangeTracking;
for (int i = 0; i < columnsImplementingIChangeTracking.Length; i++)
{
DataColumn dataColumn = columnsImplementingIChangeTracking[i];
if (!dataColumn.ImplementsIRevertibleChangeTracking)
{
object obj;
if (this.RowState != DataRowState.Deleted)
{
obj = this[dataColumn];
}
else
{
obj = this[dataColumn, DataRowVersion.Original];
}
if (DBNull.Value != obj && ((IChangeTracking)obj).IsChanged)
{
throw ExceptionBuilder.UDTImplementsIChangeTrackingButnotIRevertible(dataColumn.DataType.AssemblyQualifiedName);
}
}
}
}
DataColumn[] columnsImplementingIChangeTracking2 = this._columns.ColumnsImplementingIChangeTracking;
for (int j = 0; j < columnsImplementingIChangeTracking2.Length; j++)
{
DataColumn column = columnsImplementingIChangeTracking2[j];
object obj2;
if (this.RowState != DataRowState.Deleted)
{
obj2 = this[column];
}
else
{
obj2 = this[column, DataRowVersion.Original];
}
if (DBNull.Value != obj2)
{
IChangeTracking changeTracking = (IChangeTracking)obj2;
if (changeTracking.IsChanged)
{
((IRevertibleChangeTracking)obj2).RejectChanges();
}
}
}
}
this._table.RollbackRow(this);
}
finally
{
Bid.ScopeLeave(ref intPtr);
}
}