为何itemchanged事件不触发,,??

nthb2001 2003-08-30 12:12:53
偶在DW的itemchanged事件中,对一个列的数据进行处理后再赋回新值,

在程式单步执行时成功,触发事件并得到想要的结果,

但正常执行时,就不触发事件,对事件中的任何代码都不执行,请问这是为何?有何解决办法
...全文
228 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
runsoft 2003-08-30
  • 打赏
  • 举报
回复
赋回新值??? 使用代码是触发不了itemchanged事件的
fyyifeng 2003-08-30
  • 打赏
  • 举报
回复
把你itemchanged事件里的代码贴出来看看

klbt 2003-08-30
  • 打赏
  • 举报
回复
首先,代码有些啰嗦了,建议把下面的代码:
---------------------------------------------------------------------------
choose case len(string(rec_id_num))
case 1
rec_id = '000000' + string(rec_id_num)
case 2
rec_id = '00000' + string(rec_id_num)
case 3
rec_id = '0000' + string(rec_id_num)
case 4
rec_id = '000' + string(rec_id_num)
case 5
rec_id = '00' + string(rec_id_num)
case 6
rec_id = '0' + string(rec_id_num)

case 7
rec_id = string(rec_id_num)

end choose
----------------------------------------------------------------------------
修改为:rec_id = String(rec_id_num, "0000000")
----------------------------------------------------------------------------
其次,你在ItemChanged事件赋值,做法很奇怪,修改的列名是plan_id,最终赋值还是该列,是否会循环触发?为何不写在按钮或其它事件中?
jdsnhan 2003-08-30
  • 打赏
  • 举报
回复
楼主,偶有几个地方不明白,说出来莫怪
1、为什么要用getcolumnname() ,而不用本身的dwo.name
2、为什么要用gerrow(),而不用本身的row
3、为什么非要这样赋值呢?
解决你的问题:
在this.object.plan_id[getrow()] = rec_id 后面
this.settext(string(rec_id))
return 2
这时要对当前编辑控件中的重置
别忘了加 return 2

nthb2001 2003-08-30
  • 打赏
  • 举报
回复
这跟update没有关系吧,还有,this.getcolumnname() = 'plan_id'已执行成功呀,只是最后不知为什么会把赋入的新值还原呢?
mittee 2003-08-30
  • 打赏
  • 举报
回复
可能是 this.getcolumnname() = 'plan_id'问题.
用 dwo.name = 'plan_id' 试一试

是不是没有设update 属性阿
nthb2001 2003-08-30
  • 打赏
  • 举报
回复
在dw中还有以下几个事件中有代码

一个是

pbm_dwnpressenter 事件

IF THIS.GETCOLUMN()=LONG(THIS.OBJECT.DATAWINDOW.COLUMN.COUNT ) THEN
tab_1.tabpage_2.dw_3.setfocus()
end if

一个是

pbm_dwnkey 事件

GRAPHICOBJECT cb_control//定义环境变量
CHOOSE CASE KEY
//CASE KEYRIGHTARROW!////按光标右键右移焦点
//keybd_event (9,0,0,0)
//keybd_event(9,0,2,0)
CASE KEYDOWNARROW!////按光标下移键右移焦点
keybd_event(9,0,0,0)
keybd_event(9,0,2,0)
//CASE KEYLEFTARROW!////按光标左键左移焦点
//keybd_event(16,0,0,0)
//keybd_event(9,0,0,0)
//keybd_event(16,0,2,0)
//keybd_event(9,0,2,0)
CASE KEYUPARROW!////按光标上移键左移焦点
keybd_event(16,0,0,0)
keybd_event(9,0,0,0)
keybd_event(16,0,2,0)
keybd_event(9,0,2,0)
//CASE KEYENTER!////按回车键触发焦点处控件
//cb_control=GETFOCUS()
//IF TYPEOF(cb_control)=COMMANDBUTTON!THEN
//TRIGGEREVENT(cb_control,clicked!)
//END IF
END CHOOSE

nthb2001 2003-08-30
  • 打赏
  • 举报
回复
现在的测试结果是这样的:

每个取值都是对的,也能触发itemchanged事件,有个奇怪的事发生了,this.object.plan_id[getrow()] = rec_id这句也执行成功了,只是最后不知为什么又回复成原来的样子了,,,
bomber2001 2003-08-30
  • 打赏
  • 举报
回复
用messagebox跟踪你的dwo.name就是你所说的〉:this.getcolumnname() 看看,是否正常取到值
nthb2001 2003-08-30
  • 打赏
  • 举报
回复
倒,。。。

to:清风

不是用代码触发,而是对列操作,改变列值,使其触发,,,

代码如下:

string rec_id
int rec_id_num
this.accepttext()
if this.getcolumnname() = 'plan_id' then
rec_id = this.object.plan_id[getrow()]

if isnull(rec_id) then rec_id = '0'

rec_id_num = long(rec_id) + 1

choose case len(string(rec_id_num))
case 1
rec_id = '000000' + string(rec_id_num)
case 2
rec_id = '00000' + string(rec_id_num)
case 3
rec_id = '0000' + string(rec_id_num)
case 4
rec_id = '000' + string(rec_id_num)
case 5
rec_id = '00' + string(rec_id_num)
case 6
rec_id = '0' + string(rec_id_num)

case 7
rec_id = string(rec_id_num)

end choose

this.object.plan_id[getrow()] = rec_id

end if
klbt 2003-08-30
  • 打赏
  • 举报
回复
具体描述一下过程:原来值,赋的新值... ...

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧