itemchanged事件问题

pb8oracle 2004-07-29 08:58:14
itemchanged事件问题
各位大侠:我在itemchanged事件写了某些语句,其中有一个判断,得出不满足这个判断条件之后,用return 截止退出,其后返回录入数据窗口界面,可是为什么返回原界面后,原先未录入完的那行也就是该判断执前最后录入的数据行(没有保存的)自动没了(或者说删除了),不知应该用什么执行itemchanged事件的返回如retrun -1等,可事很多我都试验我过了,不行!
急救!!!谢谢!
...全文
280 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
pb8oracle 2004-08-01
  • 打赏
  • 举报
回复
感谢楼上!太感谢如此帮助!可是小弟不明????。。。如下:
dw_1.GetRow()是对每一行么?这里没有计算列???是么?
那返回的是个什么字符串呢?
Hanson_bati_zhu 2004-08-01
  • 打赏
  • 举报
回复
SORRY
又搞错了
应该是

ls_ret = dw_1.Describe("Evaluate('SUM(if(danwei = ~""+ls_temp+"~",1,0))',"+String(dw_1.GetRow())+")")



ls_ret = dw_1.Describe("Evaluate('SUM(if(danwei = ~~~'"+ls_temp+"~~~',1,0))',"+String(dw_1.GetRow())+")")
Hanson_bati_zhu 2004-08-01
  • 打赏
  • 举报
回复
改一下
应该用SUM,而不是COUNT

ls_ret = dw_1.Describe("Evaluate('SUM(if(danwei = ~"aaa~",1,0))',"+String(dw_1.GetRow())+")")

出现!是因为在单引号中又用了单引号,应该再加一个转意符
改成
ls_ret = dw_1.Describe("Evaluate('SUM(if(danwei = ~~~'aaa~~~',1,0))',"+String(dw_1.GetRow())+")")

也能行
pb8oracle 2004-08-01
  • 打赏
  • 举报
回复
STRING ls_temp,ls_ret
ls_temp = 'aaa'

ls_ret = dw_1.Describe("Evaluate('count(if(danwei = ~'"+ls_temp+"~', 1, 0))',"+String(dw_1.GetRow())+")")
MessageBox('',ls_ret)
返回的是一个"!"符号。怎么回事??而且ls_ret是字符串,不知这里哪有求个数的?
pb8oracle 2004-08-01
  • 打赏
  • 举报
回复
不同
Hanson_bati_zhu 2004-08-01
  • 打赏
  • 举报
回复
一、不应该啊,除非你的数据中danwei列值都是相同的
二、这样好像不对
pb8oracle 2004-08-01
  • 打赏
  • 举报
回复
首先谢谢楼上支持!我试验一下!
另外'count(if(danwei = ~'"+ls_temp+"~', 1, 0))',"这种方法好像总是得出来的是rowcount(),而不是想求的某个danwei的个数!不解!请指教!
请问group by怎么写成compute_1的表达式里!
如dw_1.object.compute_1.Expression = 'count(group by '"+ temp+"'",1, 0))'对么?
wangxichen 2004-08-01
  • 打赏
  • 举报
回复
在itemchanged事件中的返回值有特定含义的:
return 0 接受输入的信息,焦点移到下一列
return 1 拒绝接受输入的信息,焦点不移动(理论上是这样,但我用时经常是移动了)
return 2 拒绝接受输入的信息,列值回到itemchanged前的状态
Hanson_bati_zhu 2004-08-01
  • 打赏
  • 举报
回复
对于这种统计型计算列,随便取哪一行都可以
通过Evaluate进行计算不应该算是计算列,只能算是公式计算而已
返回的字符串是Evaluate函数计算的结果
Describe返回的都是字符串型,如果你的返回结果应该是数值型,那还需要进行一下类型转换
Hanson_bati_zhu 2004-07-31
  • 打赏
  • 举报
回复
楼主试试这样是否更方便些

STRING ls_temp,ls_ret
ls_temp = 'aaa'

ls_ret = dw_1.Describe("Evaluate('count(if(danwei = ~'"+ls_temp+"~', 1, 0))',"+String(dw_1.GetRow())+")")
MessageBox('',ls_ret)
pb8oracle 2004-07-31
  • 打赏
  • 举报
回复
如何用写语句脚本,在程序运行时给datawindow增加一个计算列(如何写增加compute_1,原来是没有的)!放在数据区detail区内,并给其表达式dw_1.object.compute_1.Expression = 'count(if(danwei = temp, 1, 0))'
这个整个如何用脚本写呢?
谢谢!急!
klbt 2004-07-30
  • 打赏
  • 举报
回复
按danwei分组,增加分组小计。
pb8oracle 2004-07-29
  • 打赏
  • 举报
回复
纵向可能可以采用轮流制,依次得出'aaa',3个,'bbb',2个!
请问如何用脚本写动态增加纵向某列计算列,并加以表达式count(if(danwe = 'aaa', 1, 0))
pb8oracle 2004-07-29
  • 打赏
  • 举报
回复
动态的'aaa'???怎么办?而且计算列放在哪?我是指每行不可能!纵向列也不行呀!怎么设置?
klbt 2004-07-29
  • 打赏
  • 举报
回复
在数据窗口创建计算域:
count(if(danwe = 'aaa', 1, 0))
cxwsoftware 2004-07-29
  • 打赏
  • 举报
回复
帮你顶!
pb8oracle 2004-07-29
  • 打赏
  • 举报
回复
可以了!加了setfocus就可以了
另问:
请教各位大侠:
在一个数据窗口中,如
danwei name
aaa sa
aaa wd
bbb sd
aaa asd
bbb aasd
在不保存次数据窗口的前提下,怎样直接可以得出如danwei为aaa的个数是3个呢?谢谢

tongyizh 2004-07-29
  • 打赏
  • 举报
回复
当然,既然return截止退出数据根本就没进入缓冲区当然没了,你想形成什么思路?

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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