C# DataSet.RejectChanges 方法
回滾自創建 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, "<ds.DataRow.RejectChanges|API> %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); } }
最後更新:2017-04-04 07:36:13