Csharp/C#教程:C#获取变更过的DataTable记录的实现方法分享

本文实例讲述了C#获取变更过的DataTable记录的实现方法,是一个非常实用的功能!具体实现方法如下:

首先DataTable可以看做是一个物理表的内存式存储,每一个DataRow都有一个属性叫做RowState。因此任意一行中某一个字段发生改变,那么整个DataRow的RowState也就发生了改变。RowState是一个枚举,其中包含5个内容:

1)Detached:未被附加(一般刚创建的DataRow,或者已经被Remove或者RemoveAt,或者Delete之后调用过AcceptChanges方法的行,或者是WinForm控件DataGridView默认设置下最后那个永远也留出的空行……都被自动设置该状态)。

2)Added:刚添加的新行。

3)Deleted:刚被删除的行(注意:这里只是从内存表中删除,物理数据表中尚未删除,此时你无法直接去访问该行的某个字段的内容!)。

4)Modified:刚被修改的行。

5)Unchanged:原来的行。

DataTable批量通过内部遍历这些行的RowState,然后借助DataAdapter的CRUD方法根据这些State调用不同的语句批量更新到真实数据表中。

如果要取消可以调用DataTable的RejectChanges方法,确认从内存表中删除才调用AcceptChanges方法。

通过DataRow的RowState最多只能判断哪行被修改,那么调用不同的语句如何进行更新呢?比如说我要更新一行,肯定使用update……where语句,where后面的条件是一个旧值,set是一个新值,如何获取旧值呢?

.NET中的DataColumn有一个属性叫做DataRowVersion,这个属性有4个:

1)Current:当前数值(DataRowState=Deleted时候无效)。

2)Original:原来数值(DataRowState=Added或者Unchanged时候无效)。

3)Proposed:建议数值(仅在DataRowState=Detached的时候有效)。

3)Default:默认数值(DataRowState=Added,Modified或者Unchanged时,等于Current;如果DataRowState=Deleted,等于Original;如果DataRowState=Detached,那么等于Proposed)。该属性可以自动调整,你吃不准哪一行的属性,一律可以使用这个属性获取特定字段的内容。

根据这个法则,我们再结合微软DataTable的GetChanges方法轻易可以获取做了任意变更的源数据和现实数据,具体C#实现代码如下:

DataTabledt=newDataTable(); dt.Columns.Add("Id"); for(inti=1;i<11;i++) { dt.Rows.Add(i); } dt.AcceptChanges(); //添加第十一行 dt.Rows.Add(11); //修改第二行 dt.Rows[1][0]=21; //删除第一行 dt.Rows[0].Delete(); //检索情况 DataTablecdt=dt.GetChanges(); for(inti=0;i<cdt.Rows.Count;i++) { if(cdt.Rows[i].RowState==DataRowState.Deleted) { Console.WriteLine("删除的行索引{0},原来数值是{1}",i,cdt.Rows[i][0,DataRowVersion.Original]); } elseif(cdt.Rows[i].RowState==DataRowState.Modified) { Console.WriteLine("修改的行索引{0},原来数值是{1},现在的新数值{2}",i,cdt.Rows[i][0,DataRowVersion.Original],cdt.Rows[i][0,DataRowVersion.Current]); } elseif(cdt.Rows[i].RowState==DataRowState.Added) { Console.WriteLine("新添加行索引{0},数值是{1}",i,cdt.Rows[i][0,DataRowVersion.Current]); } } 您可能感兴趣的文章:C#中DataTable实现行列转换的方法C#实现将json转换为DataTable的方法C#将DataTable转换成list的方法C#中datatable去重的方法C#中DataTable删除行的方法分析C#实现Datatable排序的方法C#中的DataSet、string、DataTable、对象转换成Json的实现代码C#使用oledb读取excel表格内容到datatable的方法

标签: ble 方法 ab le

jQuery移动页面开发中主题按钮的设计示例

C++中头文件的概念与基本编写方法

上述就是C#学习教程:C#获取变更过的DataTable记录的实现方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/905573.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐