今天在项目中发现以前的代码有用到BeginEdit和EndEdit,一直不大清楚具体作用。今天我就做了个实例测试了下应用效果;
下面是主要的测试代码,
DataRow dr = txtIsShowDs.Tables["TableOne"].Rows[0];
dr.BeginEdit();//1
dr["age"]="123";//2
dr.CancelEdit();//3
dr.EndEdit();//4
1》首先我只运行2代码,
age的值变为123,之后执行3代码,age的值仍然为123
2》首先我执行1、2代码,age的值变为123(
注:这个时候dr的状态仍然为unchanged状态,只有执行EndEdit之后才变为modified状态),之后执行3代码,age的值被回退到了之前的值
3》首先我执行1、2、4代码,age的值变为123,之后我执行3代码,age的值任然为123
总结:
BeginEdit...
EndEdit相当于程序中的事物,
BeginEdit相当于开启事物,
EndEdit相当于结束事物,
CancelEdit为回退事物,如果直接修改值,则
CancelEdit不起作用。
CancelEdit只在
BeginEdit...后,
EndEdit前才能回退修改的值;还发现重要的一点,就是在
BeginEdit之后修改记录,记录状态不变,只有执行EndEdit后记录状态才发生相应的变化,这也许就是前面讲的binding控件改变数据源,记录状态不发生改变的原因
EndCurrentEdit(EndEdit
)、
CancelCurrentEdit(CancelEdit
),当用绑定控件修改值的时候相当于开启事物,在调用
EndCurrentEdit方法之前可用
CancelCurrentEdit回退值。