pb 修改数据窗口种指定字段位置_PB中数据窗口缓冲区与数据修改状态

初始状态指定状态New!NewModified!DataModified!NotModified!New!——YesYesNoNewModified!No——YesNew!DataModified!NewModified!Yes——YesNotModified!YesYesYes——通过观察表1,我们可以发现这样一种情况:假设某个记录的状态为New!,那么不能直接改为NotModified!但可先将它改为DataModified!,然后再改为NotModified!。

利用函数RowsCopy、RowsMove可以在不同DataWindow控件(或DataStore对象)之间或同一DataWindow控件(或DataStore对象)的不同缓冲区之间复制、移动数据行。

语法:

dwcontrol.RowsCopy(startrow,endrow,copybuffer,targetdw,beforerow,targetbuffer)

dwcontrol.RowsMove(startrow,endrow,movebuffer,targetdw,beforerow,targetbuffer)

当某行在删除缓冲区中时,或者在主缓冲区或过滤缓冲区中,并且状态为NewModified!或 DataModified!时,其更新标志被设置。函数ResetUpdate清除DataWindow或DataStore中主缓冲区和过滤缓冲区中的 更新标志并清空其删除缓冲区。清除更新标志后,所有行的状态为NotModified!或New!。

语法:dwcontrol.ResetUpdate()

3 应用举例

(1)在数据窗口中,某些列常具有缺省值,或我们在执行了InsertRow操作后立即使用 SetItem函数为某些列赋值。如果用户执行了一个插入操作后立即关闭窗口会触发closequery事件,这时会提示用户记录已经被修改,但用户并没 有感觉到对数据的修改。为避免出现这种情况,可作如下处理:

intli_new_row

li_new_row=dw_l.InsertRow(0)

//通过SetItem函数为列赋值

dw_l.SetItem(……)

//将新行的修改状态置为NotModified!

dw_l.SetItemStatus(li_new_row,0,primary!,NotModified!)

(2)在应用程序中提供Undo功能,将实现很好的用户友好效果。本例中将数据窗口dw_l中的当前行、当前列的显示值置为从数据库中检索出的原始值:

string ls_ori_val

ls_ori_val=dw_l.GetItemString(dw_l.GetRow(),dw_l.GetColumn(),

&Primary!,True)

dw_l.SetText(ls_ori_val)

(3)在协调两个DataWindow对象dw_l、dw_2的更新时,若其中一个更新失败,应阻止重设更新标志,以便回滚事务,一旦所有数据窗口都已成功更新,就可使用COMMIT结束该事务,并使用ReSetUpdate重新设置数据窗口的状态标志。

Int li_ret_code

li_ret_code=dw_l.Update(True,False)//阻止重设更新标志

If li_ret_code=l then

li_ret_code=dw_2.Update(True,False)//阻止重设更新标志

lf li_ret_code=l then

dw_l.ResetUpdate()//清除更新标志

dw_2.ResetUpdate()//清除更新标志

COMMIT;

Else

ROLLBACK;

Endif

Endif

(4)将数据行从删除缓冲区移到主缓冲区,实现取消删除的功能。

dw_l.RowsMove(l,dw_l.DeletedCount(),Delete!,dw_l,l,Primary!)

2f60c0bc47d4178ac5e2b807936153ff.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值