datarow.rowstate:
当新建一行的时候,状态为Detached,不属于任何表,把它添加到表中后,状态为Added,这时候你修改这条数据,他的状态还是Added,
把它添加到表中后,状态为Added
0 如果 这时候你修改这条数据,他的状态还是Added,
1 如果 如果再去调用delete(),他的状态又变会Detached,而不是delete状态。
2 如果 这个时候调用 acceptchanges().它的状态为Unchanged。
3 如果 这个时候调用 RejectChanges()它的状态为Detached,注意,RejectChanges() 方法总是将其状态调整为上一次调用acceptchanges().之后的状态
即:如果 RowState 是“已删除”或“已修改”,则该行恢复为其以前的值,RowState 变成“未更改”(Unchanged)。如果 RowState 是“已添加”,则该行将被移除。
如果一个行的状态是Unchanged:
1 如果修改数据,状态为Modified,
2 如果从1中的状态在去调用RejectChanges(),当然变为Unchanged了;
3 如果从1的状态去调用acceptchanges(),当然也是Unchanged();
4如果从3的状态去调用 delete,则状态为Deleted,如果调用RejectChanges(),当然变为Unchanged了;
5 如果从Deleted状态调用delete(),则变为Detached。
从以上总结出rowstate的规律:
行版本详解:
一个Table主要布局:
restrict
original
current
Proposed
relation
对于dataset而言,行版本能够解决的问题是丢失修改,从数据库加载数据到DATASET中时,默认都有original,current两个版本,
没有Proposed版本,当要修改一行的数据的时候,调用beginedit().这时候会把current拷贝到Proposed版本中,然后修改数据是
在Proposed 中进行的,在给列赋值的时候会发生列校验,如果调用cancleedit(),会把Proposed版本删掉,调用endedit()的时候
会把Proposed版本拷贝到current版本中,注意,在从Proposed拷贝到current中会发生行校验,如果调用acceptchanges()这个
时候会把current版本覆盖到original版本中去,如果调用rejectchanges()会把original版本拷贝到current版本,再来说说,行版本
和行状态的转换关系:
判断是不是modified,如果original版本不等于current版本就表明修改过了
判断是unchanged,如果original版本等于current版本就表明是无变化的
判断是Added,如果只有current版本,没有original版本就表明是增加的
判断Deleted,只有origianl没有current版本,就表明是删除状态了。
在modied状态时候,如果调用acceptchanges(),C版本拷贝到O版本,如果调用rejectchanges,会把O拷贝到C
在刚创建一个新行的时候处于Detached,只有Proposed版本,调用add,会把P版本拷贝到C版本,如果调用reject会变成Detached状态,
在deleted 状态时候,调用acceptchages(),状态会变成Detached,