powerbuilder:如何确保datawindow中的文本字段不为空?

时间:2010-06-24 12:21:10

标签: powerbuilder datawindow

我有一个使用pfc服务的用户对象。现在,在更新期间,如何确保数据窗口中的文本字段不为空?

3 个答案:

答案 0 :(得分:3)

PFC具有DataWindow必需列服务,该服务更改列的必需属性的行为以在保存时进行评估。如果您的要求涉及editmask列,这将不起作用,但可能是一种简单的方法来实现这一点。

要使用它,我将以下代码放在构造函数中(警告:自从我使用它以来已经有一段时间了):

of_SetReqColumn(TRUE)
inv_reqcolumn.of_RegisterSkipColumn ("col_a")
祝你好运,

特里。

答案 1 :(得分:2)

我将尝试解释我使用的方法,以确保用户不会将指定的字段留空。以下是我在u_dw(祖先)的pfc_updateprep事件中放入的代码。然后,对于我想要在任何情况下给出值的每一列,我在文本字段的M属性中放置tag 来描述该列。 HTH。

integer         li_size,i,l,li_zero
string           ls_textname,ls_tag,ls_objects[]
string           ls_col,ls_type,ls_text,ls_key,ls_any
any             la_null,la_any
dec             ld_zero
real               lr_zero
long               ll_zero
boolean         lb_zero

dwItemStatus    l_status,l_key_status

This.Modify("DataWindow.Table.UpdateKeyinPlace=Yes")

li_size = This.inv_base.of_Getobjects(ls_objects[ ],"column","*",TRUE)

FOR l=1 TO This.Rowcount()
    l_status=This.GetItemStatus(l, 0,Primary!)
    IF l_status=NewModified! OR l_status=Datamodified! THEN
        FOR i = 1 to li_size
            ls_col=ls_objects[i]

            ls_key = Upper(This.Describe(ls_col+".Key"))
            ls_type=This.Describe ( ls_col + ".ColType")

            ls_textname=ls_col+"_t" // because the textnames that I use are the same as the column names followed by a "_t"
            ls_tag=This.Describe(ls_textname+".Tag")
            ls_text=This.Describe(ls_textname+".Text")


            IF ls_tag='M' THEN
                lb_zero = FALSE
                IF This.Rowcount()>0 THEN
                    la_null=This.inv_base.of_GetItemany(l,ls_col)

                    choose case Upper(MidA(ls_type,1,3))
                        case 'DEC' 
                            ld_zero=Dec(la_null)
                            IF ld_zero = 0 THEN lb_zero=TRUE
                        case 'INT' 
                            li_zero=Integer(la_null)
                            IF li_zero = 0 THEN lb_zero=TRUE
                        case 'REA' 
                            lr_zero=Real(la_null)
                            IF lr_zero = 0 THEN lb_zero=TRUE
                        case 'LON' 
                            ll_zero=Long(la_null)
                            IF ll_zero = 0 THEN lb_zero=TRUE
                    end choose

                    IF Isnull(la_null) OR lb_zero THEN
                        Messagebox(gnv_app.of_Getframe().Getactivesheet().Title,&
                                    "You must provide a value for the following field ~r("+&
                                    ls_text+") !!!")
                        Return FAILURE
                    END IF
                END IF
            END IF
        NEXT
    END IF
NEXT

Return  SUCCESS

答案 2 :(得分:2)

我在PB中所做的是将以下数据窗口列属性设置为TRUE或选中:

  • 空字符串为NULL
  • 必需

如果您这样做,数据窗口应自动为您验证字段,并防止用户将该字段留空。

[编辑 - 特里总是提出好建议之后的澄清]

我的帖子的第一部分应该在数据输入时适用于文本字段,我相信会强制用户在允许焦点更改之前在dw中输入有效值,除非您修改该行为,例如,在itemchanged中事件。

可以打开PFC必需列服务并在其中注册该列以提供保存时间验证。这使得用户在浏览字段时在字段中移动变得不那么麻烦,并且只有在用户尝试保存时才会对其进行纠缠。