C# DataSet.RejectChanges 方法

本文探讨了如何在数据集中管理更改,包括如何使用Rejection和Acceptation方法来处理添加、删除和修改的数据行。重点介绍了如何通过调用DataTable.RejectChanges方法来拒绝特定的更改,同时保持编辑模式的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回滚自创建 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);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值