举例讲解了数据控件DataTable的数据记录操作,当还没有做datatable.acceptChangs()操作之前对数据行发生增删改时,可取得修改前后的值。具体可看文档中的距离代码。可以直接新建Windows控制项目进行代码运行。 ### C# DataTable 数据表的操作详解 #### 一、概述 在C#开发中,`DataTable` 是一个非常重要的数据结构,它提供了类似数据库表格的功能,用于存储和操作数据集。本文将详细介绍如何在C#中操作`DataTable`,特别是在没有调用`DataTable.AcceptChanges()`方法前对数据行进行增加、删除或修改时,如何获取修改前后的值。 #### 二、`DataTable` 基础概念 `DataTable` 类属于`System.Data`命名空间,它是一个内存中的关系型数据表,可以存储数据并提供对数据的操作方法。每个`DataTable`对象都可以包含多个`DataColumn`(列)和`DataRow`(行)。 - **`DataColumn`**: 表示表中的单个列。 - **`DataRow`**: 表示表中的单个行。 #### 三、`DataTable`操作示例 本示例通过创建一个`DataTable`,向其中添加列和行,并演示如何获取数据行的状态(`DataRowState`)。 ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DataTable dt1 = new DataTable(); // 添加列 dt1.Columns.Add("A", System.Type.GetType("System.String")); dt1.Columns.Add("B", System.Type.GetType("System.String")); dt1.Columns.Add("C", System.Type.GetType("System.String")); dt1.Columns.Add("D", System.Type.GetType("System.String")); // 添加行 dt1.Rows.Add("12", "a", "q", "w"); dt1.Rows.Add("13", "b", "w", "e"); dt1.Rows.Add("14", "c", "r", "t"); // 调用 AcceptChanges 来清除状态 dt1.AcceptChanges(); // 修改数据 foreach (DataRow dr in dt1.Rows) { dr["B"] = "A"; // 修改所有行的 B 列 } // 新增一行 dt1.Rows.Add("15", "d", "t", "q"); // 删除第一行 dt1.Rows[0].Delete(); // 获取已添加的新行 DataTable dt2 = dt1.GetChanges(DataRowState.Added); // 获取已修改的行 DataTable dt3 = dt1.GetChanges(DataRowState.Modified); // 获取已删除的行 DataTable dt4 = dt1.GetChanges(DataRowState.Deleted); // 输出结果 Console.WriteLine("添加的新行:"); foreach (DataRow row in dt2.Rows) { Console.WriteLine(string.Join(", ", row.ItemArray)); } Console.WriteLine("\n修改的行:"); foreach (DataRow row in dt3.Rows) { Console.WriteLine(string.Join(", ", row.ItemArray)); } Console.WriteLine("\n删除的行:"); foreach (DataRow row in dt4.Rows) { Console.WriteLine(string.Join(", ", row.ItemArray)); } Console.ReadLine(); } } } ``` #### 四、`DataRowState` 状态 `DataRowState` 是`DataRow`的一个枚举属性,用于表示当前行的状态: - **`Added`**: 行已被添加到`DataTable`中,但未调用`AcceptChanges`。 - **`Modified`**: 行已被修改,但未调用`AcceptChanges`。 - **`Deleted`**: 行已被标记为删除,但未调用`AcceptChanges`。 - **`Unchanged`**: 行自上次调用`AcceptChanges`后未被更改。 #### 五、`AcceptChanges` 和 `RejectChanges` 方法 - **`DataTable.AcceptChanges()`**: 清除所有`DataRow`的状态,并将它们设置为`Unchanged`状态。 - **`DataTable.RejectChanges()`**: 撤销自上次调用`AcceptChanges`以来的所有更改。 #### 六、编辑模式与 `BeginEdit` 和 `EndEdit` 方法 - **`BeginEdit`**: 开始编辑模式,在此模式下,可以修改行,但更改不会立即反映出来。 - **`EndEdit`**: 结束编辑模式,此时更改会应用到行。 在编辑模式下,如果使用`BeginEdit`开始编辑,则需要调用`EndEdit`或`RejectChanges`来结束编辑。 ### 总结 本文详细介绍了在C#中如何操作`DataTable`,重点在于理解`DataRowState`以及如何使用`GetChanges`方法来获取数据行的状态。通过实例代码演示了如何创建`DataTable`,添加数据,修改数据,并获取数据的状态。这些技术对于处理数据集和数据表是非常有用的。



























Added 该行已添加到 DataRowCollection 中,AcceptChanges尚未调用。
Deleted 该行已通过 DataRow 的 Delete 方法被删除。
Detached 该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之 前;或从集合中移除之后。
Modified 该行已被修改,AcceptChanges 尚未调用。
Unchanged 该行自上次调用 AcceptChanges 以来尚未更改。
DataTable.AcceptChanges方法:提交自上次调用AcceptChanges以来对该表进行的所有更改。
调用AcceptChanges时,任何仍处于编辑模式的DataRow对象将成功结束其编辑。DataRowState也发生更改:所有Added和Modified行成为Unchanged;Deleted行被移除。
在您尝试使用DbDataAdapter.Update方法更新DataSet之后,通常会对DataTable调用AcceptChanges方法。
DataTable.RejectChanges方法:回滚自该表加载以来或上次调用AcceptChanges以来对该表进行的所有更改。
调用RejectChanges时,任何仍处于编辑模式的DataRow对象将取消其编辑。新行被移除。DataRowState设置为Modified或Deleted的行返回到其初始状态。会出现对DataTable进行多次更改,但是通过调用RejectChanges方法拒绝这些更改的现象。
DataRow.BeginEdit方法:对DataRow对象开始编辑操作。
使用BeginEdit方法将DataRow置于编辑模式。在此模式中,事件被临时挂起,以便允许用户在不触发验证规则的情况下对多行进行多处更改。例如,如果需要确保总数列的值等于某行中借贷列的值,则可以将每一行都置入编辑模式,以便在用户尝试提交值之前挂起对行值的验证。
sBeginEdit方法在用户更改数据绑定控件的值时被隐式调用;EndEdit方法在您调用DataTable对象的 AcceptChanges方法时被隐式调用。
举个例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;


- 粉丝: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 圆形基坑地下连续墙的稳定性分析.doc
- 基于PLC四层电梯控制系统方案设计书大学本科方案设计书.doc
- 自来水公司调度大楼.doc
- 住宅楼外门窗、幕墙工程专业分包招标文件.doc
- 商会大厦消防施工组织(力争鲁班奖).doc
- 井下变电所自动化系统技术实施实施方案书.doc
- 大学举办文艺晚会企划方案.doc
- 紫铜管气焊操作工艺.doc
- 基于unity3d标准的皖南红色文化三维可视化平台设计.docx
- SSH框架的文档管理的完整.doc
- PLC课程设计(三层电梯控制系统).doc
- 金融大数据的机遇与挑战分析.docx
- 全过程造价控制与管理工作方案.pdf
- 工程审计的实施方案(016).doc
- 锅炉设备进口合同(中英文).doc
- 综合管廊解决方案.pdf


