黑夜的狼

沮丧吗,那就是一种无病呻吟!留恋它就是一种高度近视!目光应该放得更远一点! 别不想飞,只是要一步跨过太平洋!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一个DataRow对象刚被创建之后其状态是Detached,是孤立的一个存在,所以建立了DataRow之后在DataRow中的单元填充了数据后还要通过DataTable.Rows.Add(DataRow)方法将此DataRow添加到DataTable,DataRow添加到DataTable后,   这个DataRow的状态就转变为Added。
当修改了这个DataRow后,这个DataRow状态转为Modified,当用DataRow.Delete()方法删除DataRow后,DataRow状态将转为Deleted,不过此行还存在在DataTable中的,只是状态改变了,这时用DataTable.Rows.Count查看行数,跟删除前是一样的。

只有在调用了DataTable.Remove(DataRow)方法后,此DataRow才被从DataTable移除,状态也回复到Detached孤立状态。但对于远程的Remoting的数据集DataTable.Remove(DataRow)方法不能从测表中移出;只能用DataRow.Delete()方法加 AcceptChanges()方法

MSDN对DataRow.Delete 方法的解释:如果行的 RowState 是“Added”,则该行将从表中移除。

想要不让该行删除,你可以先对这行调用AcceptChanges,让Added状态,变为UnChange,之后再调用Delete(),这样一来,状态改为Deleted,但是并不从Table中直接删除,也就是说在统计Count的时候,它还算一行

在使用 Delete 方法后,RowState 变成“Deleted”。在您调用 AcceptChanges 之前,它一直保持“已删除”。可通过调用 RejectChanges 取消删除行。

用Delete(),DataSet的HasChanges()=true;
用Remove(),DataSet的HasChanges()=false;

 

1. 只有在Added状态下使用Delete(),该行才能在Table中去掉,使Rows.Count -1,DataRow的状态变为 Detached (游离状态,用NewRow()实例化行,还没加入到Table中也是这种状态)

2, Unchange(非Deleted行在调用AcceptChanges后的状态,直接从数据库中取的也是这种状态),在修改内容或调用Delete()后,变为Modify或者Deleted状态

3,Added在修改后还是Added

4,Unchange和Modify状态下调用Delete()会转变以Deleted,但Rows.Count并不减少

5, Deleted状态下如果修改该行内容会报: 不能通过已删除的行访问该行的信息 错误

6, Deleted状态下,如果还想重新使用该行,可以在调用AcceptChanges 后,重新使用 Table.Rows.Add(DataRow)方法加入,加入后的状态为Added

posted on 2012-04-12 00:13  anncesky  阅读(2474)  评论(0)    收藏  举报