C# DataSet.RejectChanges 方法

简介:         回滚自创建 DataSet 以来或上次调用 DataSet.AcceptChanges 以来对其进行的所有更改。         调用 DataSet.RejectChanges 以针对由 DataSet 包含的所有 DataTable 对象调用 DataTable.RejectChanges 方法。         由 DataSet 包含的每个 DataRow 对象
        回滚自创建 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);
	}
}


目录
相关文章
|
9天前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
9天前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
9天前
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
247 0
|
9天前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
9天前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
12 0
|
9天前
|
存储 开发框架 .NET
C#中将DataTable转化成ListT的方法解析
C#中将DataTable转化成ListT的方法解析
11 0
|
9天前
|
数据采集 前端开发 数据挖掘
Fizzler库+C#:从微博抓取热点的最简单方法
本文介绍如何使用Fizzler库和C#构建微博热点信息爬虫。通过Fizzler的CSS选择器定位关键信息,提取热点标题和排名,实现微博内容的智能挖掘。示例代码展示单线程和多线程采集方法,并涉及代理IP使用。
Fizzler库+C#:从微博抓取热点的最简单方法
|
9天前
|
存储 数据采集 API
C# GetField 方法应用实例
C# GetField 方法应用实例
|
9天前
|
JSON 安全 API
C# GetMethod 方法应用实例
C# GetMethod 方法应用实例
|
9天前
|
设计模式 IDE 测试技术
提升 C#编程效率的技巧与方法
【4月更文挑战第20天】提升C#编程效率的关键技巧包括:选择合适的IDE(如Visual Studio)、掌握基础语法、规划良好代码结构、使用代码生成工具、复用代码、利用库和框架、定期重构、应用设计模式、避免过度设计、进行代码审查、自动化测试、学习新技术、养成良好编程习惯、定期备份代码及参与技术社区。通过这些方法,开发者能提高代码质量和开发效率。