当前位置: 首页 > news >正文

DataRow的RowState属性

datarow的rowstate属性(状态)取值有5种:detached, unchanged, added, deleted, modified.

当我们用datarow newrow = datatable.newrow();方法产生一个新的datarow时,

它的状态是detached,意为“分离”,如果把一个datatable理解为一个果盘,那么状态为detached的datarow可以理解为放在果盘(datatable)外的苹果(datarow).

可能有人要问:“为什么不是system.data.datarow dr = new system.data.datarow();呢?

因为在如果要使用构造函数实例化一个数据行时,根本无法确定该数据行的结构,需要由表的结构来确定行的结构。

所以不应该是:

 system.data.datarow dr = new system.data.datarow();
 
而应该是:

         system.data.datarow dr = dt.newrow();        //dt是一个包含列集合的datatable


然后会将这个newrow用datatable.rows.add(newrow); 方法添加到datatable中。
此时newrow的状态是added, 这个时候执行datatable.acceptchanges()方法,提交改动。此时newrow的状态是unchanged, 这个时候呢,当然可以执行newrow.delete()操作或是datatable.remove(newrow)或是编辑这一行啊,

但是注意此时执行之后对应的状态分别是(执行删除后)deleted, (执行remove后)detached, (执行编辑后)modified.
如果再执行datatable.acceptchanges()方法,提交改动状态分别是detached, detached, unchanged.
而 newrow.delete()与datatable.remove(newrow)的区别就是newrow.delete()并没有直接从datatable里移除newrow, 而只是将其状态变为deleted, 因此需要调用datatable.acceptchanges()提交

更改才能移除,移除的概念是将其状态变为detached, 并没有真的将newrow销毁,而datatable.remove(newrow)方法直接将newrow状态变为detached, 不用再调用datatable.acceptchanges()提交更改。但如果在newrow状态为added的时候执行newrow.delete(), 那就直接移除,并将其状态变为detached. 有提交更改自然也有与之对应的回滚操作datatable.rejectchanges(), 值得注意的是回滚操作会分别将状态为added, deleted, modified, 统统变为最近一次的unchanged. 对于状态已经为detached的,datatable.rejectchanges()方法是无能为力的。

 

转载于:https://www.cnblogs.com/gzhnan/articles/1904866.html

相关文章:

  • HTML a 标签的 target 属性说明
  • 冬季谨防胃病复发 放松精神吃温热食物
  • 最经典的权限设计同样也是最糟糕的权限设计,权限设计理念最关键第一步之间的PK...
  • 回到达姆喽
  • 2011年通信运营的十大悬念
  • 改造面向过程式设计
  • 朝三暮四,还是朝四暮三?
  • dell mini9 fluxbox 亮度的调节和 wireless 无线网卡的安装
  • 黑客如何找回被偷走的电脑
  • Microsoft SQL Server Integration Service文章总结
  • 刷机 G7 2.3 Rom 的步骤
  • 毕业后的五年拉开大家差距的原因在哪里(轉)
  • C# 中编译器是如何实现闭包的
  • 积木人生
  • 初探SharePoint 2010如何强化员工协同
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • create-react-app项目添加less配置
  • Java的Interrupt与线程中断
  • leetcode98. Validate Binary Search Tree
  • Linux链接文件
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • React-生命周期杂记
  • 安装python包到指定虚拟环境
  • 二维平面内的碰撞检测【一】
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 排序算法学习笔记
  • 前端面试之CSS3新特性
  • 深入浅出Node.js
  • 实现菜单下拉伸展折叠效果demo
  • 算法-插入排序
  • 探索 JS 中的模块化
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序开发问题汇总
  • 转载:[译] 内容加速黑科技趣谈
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # include “ “ 和 # include < >两者的区别
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)计算机毕业设计高校学生选课系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (算法)N皇后问题
  • (正则)提取页面里的img标签
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net项目IIS、VS 附加进程调试
  • @Autowired 与@Resource的区别
  • @WebServiceClient注解,wsdlLocation 可配置
  • [C#]C#学习笔记-CIL和动态程序集