DataRow对象有两个比较重要的属性,分别是行状态(RowState)和行版本(DataRowVersion),通过这两个属性能够有效的管理表中的行。下面简要的介绍一下行状态和行版本的特点和关系。

ü         行状态(RowState):

l         UnChanged状态:指表中的行自创建之后没有做过任何改动的状态,或则是行在上次接受修改之后,至今未做过任何改动的状态。

l         Added状态:该状态是指已经将行添加到表中,但是尚未调用表对象的AcceptChanged方法。调用AcceptChanged方法时,所有处在Added状态的行都变为Unchanged状态。

l         Modified状态:该状态表示该行已经被修改。调用AcceptChanged方法时,所有处在Modified状态的行都变为Unchanged状态

l         Deleted状态:该状态表示该行已经从表中删除,但是尚未调用表对象的AcceptChanged方法

l         Detached状态:该状态表示该行不属于任何表,或则已经从表中分离出去了,不再属于任何表的DataRow对象。

下面举例说行的变化状态。新建的行(DataRow对象)处于Detached状态,把它添加到DataTable对象之后,该DataRow对象的状态变为Added状态。如果对该DataRow进行了修改,则该行处于Modified状态。如果使用Remove方法从表中移除该DataRow对象,或则使用Delete方法和AcceptChanged方法移除该行,则该行处于Detached状态。

ü         行版本(DataRowVersion)

行(DataRow)对象有四种不同的行版本,分别是Current,Original,proposed和default。下面对这些行版本进行简要的说明。

l           Current:表示行的当前值。处于deleted状态的行不存在该行版本。

l           Original:表示行的原始值。处于Added状态的行不存在该行版本

l           Proposed:表示行的建议值。不属于表的行,即处于Detached状态的行存在该行版本;对于正在进行编辑的行,也存在该行版本。

l           Default:表示行的默认版本。处于Added,Modified或则Unchanged状态的行的默认行版本是current;处于deleted状态的行的默认行版本是original。处于Detached状态的行的默认版本是proposed。

下面举例说明行状态和行版本的变化。当调用AcceptChanged方法,所有处于deleted状态的行将变为Detached状态,即被移除。其余的行会变为Unchanged状态,并且Original版本中的值会改写为current行版本的值。


http://cyjwlj.spaces.live.com/blog/cns!61937147116f197a!148.entry

DataRow的RowState和DataRowVersion.Original

static void Main()
        {
// Create a new DataRow.
            row = table.NewRow();
            // Detached row.
            Console.WriteLine("New Row " + row.RowState);
            if (row.HasVersion(DataRowVersion.Original))
                Console.WriteLine("New Row " + "XXXXXXXXXXXXXXXXXXX");
table.Rows.Add(row);
            // AddRow row.
            Console.WriteLine("AddRow " + row.RowState);
            if (row.HasVersion(DataRowVersion.Original))
                Console.WriteLine("AddRow " + "XXXXXXXXXXXXXXXXXXX");
table.AcceptChanges();
            // Unchanged row.
            Console.WriteLine("AcceptChanges " + row.RowState);
            if (row.HasVersion(DataRowVersion.Original))
                Console.WriteLine("AcceptChanges " + "XXXXXXXXXXXXXXXXXXX");
row["FirstName"] = "Scott";
            // Modified row.
            Console.WriteLine("Modified " + row.RowState);
            if (row.HasVersion(DataRowVersion.Original))
                Console.WriteLine("Modified " + "XXXXXXXXXXXXXXXXXXX");
row.Delete();
            // Deleted row.
            Console.WriteLine("Deleted " + row.RowState);
            if (row.HasVersion(DataRowVersion.Original))
                Console.WriteLine("Deleted " + "XXXXXXXXXXXXXXXXXXX");
}
        static DataTable MakeTable()
        {
            // Make a simple table with one column.
            DataTable table = new DataTable("table");
            DataColumn dcFirstName = new DataColumn(
                "FirstName", Type.GetType("System.String"));
            table.Columns.Add(dcFirstName);
            return table;
        }
output:
New Row Detached
AddRow   Added
AcceptChanges Unchanged
AcceptChanges XXXXXXXXXXXX
Modified Modified
Modified XXXXXXXXXXXX
Deleted Deleted
Deleted XXXXXXXXXXXX
												

DataRow对象的RowState和DataRowVersion属性特点相关推荐

  1. 行DataRow对象的属性和方法

    DataRow对象的常用属性: HasError--确定行是否包含错误. Item--通过指定行的列数,读取行内的数据,如Item(2),就是读取第3个数据. ItemArray--获取或设置行中所有 ...

  2. 行(DataRow)对象四种行版本:Current! Original! Proposed! Default!

    DataRow对象有两个比较重要的属性,分别是行状态(RowState)和行版本(DataRowVersion),通过这两个属性能够有效的管理表中的行.下面简要的介绍一下行状态和行版本的特点和关系. ...

  3. Selenium提取数据之标签对象提取文本内容和属性值

    Selenium提取数据之标签对象提取文本内容和属性值 find_element仅仅能够获取元素,不能够直接获取其中的数据,如果需要获取数据需要使用以下方法 对元素执行点击操作element.clic ...

  4. php protected 属性,PHP实现在对象之外访问其私有属性private及保护属性protected的方法...

    本文实例讲述了PHP实现在对象之外访问其私有属性private及保护属性protected的方法.,具体如下: public 表示全局的访问权限,类内部外部子类都可以访问: private表示私有的访 ...

  5. C# CAD对象 构造时应把它的父对象也加进它的属性里

    C#  CAD对象  构造时应把它的父对象也加进它的属性里 因为你要根据这一级找它的上一级 转载于:https://www.cnblogs.com/houlinbo/archive/2009/08/2 ...

  6. JavaScript 判断对象中是否有某属性

    一.点( . )或者方括号( [ ] ) 通过点或者方括号可以获取对象的属性值,如果对象上不存在该属性,则会返回undefined.当然,这里的"不存在"指的是对象自身和原型链上都 ...

  7. python修改类的属性值_python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值...

    三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...

  8. 事件参数对象下的几个属性 mouseenter与mouseover的区别

    事件参数对象下的几个属性 <!DOCTYPE html> <html lang="en"> <head><meta charset=&qu ...

  9. 判断一个js对象,是否具有某个属性

    一个对象,想必我们关注的最多的应该是它上面的属性有哪些吧.那么,怎么判断一个对象是否具有某个属性呢? 1 /*下面是一个对比,看看在判断是否包括一个键上面,Object结构和Set结构的写法不同.*/ ...

最新文章

  1. 蚂蚁金服×西安银行 | 西安银行手机银行App的智能升级之路
  2. Tramp data In Kernel
  3. SpringBoot项目遇到的一些问题
  4. java上传和下载文件代码_JavaWeb中上传和下载文件实例代码
  5. 【渝粤题库】陕西师范大学202421 教育管理心理学 作业 (专升本)
  6. jquery 获取tr里的值_jquery获取tr中控件值并操作tr实现思路
  7. openssh 加固
  8. php提取汉字拼音首字母,php获取汉字拼音首字母的函数(真正可以使用的)
  9. 使用loadrunner录制winsock协议的程序(原创)
  10. java安装教程详细
  11. 安装Flash Builder4.6遇到的问题
  12. java-合并两个有序链表
  13. 谈谈培训机构的“骗局“给新人一些建议
  14. 【国产RX解码】XS9922A 四通道多合一同轴高清解码芯片 功能对标TP9930
  15. 关于tomcat启动出现To prevent a memory leak, the JDBC Driver has been forcibly unregistered.问题
  16. 苹果邮箱登录入口_电子邮箱的申请及使用说明
  17. 伯恩半导体 - ESD 选型指南
  18. 飞机大战(C语言版)
  19. 重庆大学计算机科学与工程学院,何中市
  20. 解决微信小程序 wx.request 方法不支持 Promise 并发数问题

热门文章

  1. WWDC20 CoreImage 专题
  2. 【Android开发】Android概述
  3. RPC or noRPC,这是个问题
  4. inventor导出tekla_Inventor iLogic - 批量导出PDF,DXF,DWF
  5. 安卓模拟器可访问电脑ip配置
  6. 计算机图形学专业术语
  7. $.ajax() 参数详解
  8. 单招报计算机要考什么,单招考试一般都考什么内容
  9. 大数据与区块链的联系与区别
  10. 红米note4X_高通版(2016101)_官方线刷包_救砖包_解账户锁