注册 登录
编程论坛 PowerBuilder

如何设置数据窗口在增加记录时某字段不为空

第三只眼睛 发布于 2006-11-27 00:47, 1648 次点击
我建立了一个数据窗口,有两个字段:bmno和bmmc.我想在增加或者修改记录的时候不能让它们为空,于是在数据窗口的column specification的属性中相应字段的valadition设置为:not isnull(gettext()),valadition message设置为'不能为空',可是在运行的时候当上述字段为空的时候还是能通过啊.请教各位高手应该怎么设置呢?
8 回复
#2
第三只眼睛2006-11-27 21:44
我把如下这段代码加到itemchanged和rowfocuschanged事件里面,均能通过编译,但是达不到效果.请问是为什么啊?
if dw_1.getitemstring(row,1)='' then
messagebox('','')
return 1
end if
我对getitemstring()的理解是:row表示当前行,1表示第一列,所以焦点离开当前行第一列的时候触发事件.可是没有.
#3
石门书生2006-11-28 08:34
if dw_1.getitemstring(row,1)='' or len(trim(string(dw_1.getitemstring(row,1))))<1 then
messagebox('','')
return 1
end if
#4
第三只眼睛2006-11-28 22:45
谢谢楼上的.可是我在itemchanged事件中写这个代码没有效果啊.如果在第一列什么都没有输入就跳转到第二列还是不会触发这个脚本啊.
#5
第三只眼睛2006-11-29 00:30
今天又试了下,觉得在itemchange事件中写脚本不行.因为当用户修改已有数据的时候,这样做可以,但是新增加一行数据的时候什么也不输入就离开,就不会触发该事件.在rowfocuschanged事件中也不行.这样写当焦点离开当前列的时候会触发事件,但是当增加一行,焦点到新列的时候就会触发该事件.我想的是当焦点离开当前列的时候再做检查.看了下losefocus,好象不是用来做这个的.哪位高手指点下啊.
#6
石门书生2006-11-29 09:31
通常我在做这个的时候,在UPDATE()之前要逐行校验一边,有空的提示第几行要输入必填项
#7
第三只眼睛2006-12-01 23:20
石门书生,你是用自定义的事件还是怎么做的呢?
#8
werley2006-12-01 23:34

long li_row

string ls_column //假设是字符型
For li_row = 1 to Dw_1.rowcount()

ls_column = Dw_1.Object.列名[li_row]

IF ISNULL(ls_column) or len(ls_column) = 0 Then

messagebox("","")
dw_1.setcolumn("列名")
dw_1.scrolltorow(li_row)
dw_1.setfocus()
return -1
End IF

End For

加在dw_1.UPDATE()前面,就可以检测空值问题,吧!!!

#9
第三只眼睛2006-12-08 00:18
感谢楼上的各位啊,尤其是werley,最终用你的方法解决了啊.
1