DW内除了ITEMCHANGE外没其它事件,我做了一个SETITEM,完了以后很快这个数值消失了,求解
ls_zyps_bm=cur_object.no
this.object.zyps_bm[row]=ls_zyps_bm
ls_temp=this.object.zyps_bm[row]
messagebox("Dd",ls_temp)
弹出MESSAGEBOX时还正常显示,按完确定以后就不见了,DW只有ITEMCHANGE事件,没有其它事件
具体程序如下
sel_cli_sup_prod cur_Object
string ls_prodno,ls_temp
CHOOSE CASE dwo.name
CASE 'zypj_bz'
if data='1' then
dw_1.setitem(row,'zypj_ex_bz','1')
else
dw_1.setitem(row,'zypj_ex_bz','0')
end if
case 'zyps_bm'
dw_1.AcceptText()
string ls_zyps_bm
ls_zyps_bm=data
if ls_zyps_bm='' or isnull(ls_zyps_bm) then return
if asc(data) <= 127 then
cur_object.send_object = "d_zy_prod"
cur_object.no = trim(data)
else
cur_object.send_object = "d_zy_prod_name"
cur_object.no = "%" + trim(data) + "%"
end if
openwithparm(w_sel_cli_sup , cur_object )
cur_object = message.powerobjectparm
ls_zyps_bm=cur_object.no
messagebox("row",string(row))
messagebox("zyps_bm",ls_zyps_bm)
this.object.zyps_bm[row]=ls_zyps_bm
ls_temp=this.object.zyps_bm[row]
messagebox("Dd",ls_temp)
end CHOOSE
------解决方案--------------------
setitem后,还要dw_1.accepttext()一下。
------解决方案--------------------
setitem后(如果SETITEM的这个列是更改的这个列的话)
return 2
不要MESSAGEBOX.如果必须MESSAGEBOX的话
改为
setitem(...)
post messagebox('','')
return 2
--------------------
或者,如果你必须有一个reponse的窗口要在RETURN 2之前打开(比如上述的MESSAGEBOX)
则,新建一个窗口函数
wf_1(long row,long column,string value)//由这个函数去SETITEM
post wf_1(...)//留意是post
RETURN 2
------解决方案--------------------
如果setitem是针对当前行和列做的操作,需要增加用到post函数
因为itemchanged执行完成后,pb才把编辑框中的数据接收到数据窗口的缓冲区中,意思就是执行过temchanged事件后,pb会自动执行一下类似于setitem,就会把你的setitem的值给冲掉了
你可以在itemchanged代码中这么写
this.post function setitem(row, "zyps_bm", ls_zyps_bm) //把你的this.object.zyps_bm[row]=ls_zyps_bm换为前面的代码 即可
------解决方案--------------------