4GL COMBOX动态绑定内容

一般的COMBOX我们一般的是直接在per里面写item属性,如下代码:
  1. COMBOBOX    tc_qcjj08  = FORMONLY.tc_qcjj08,COMMENTS ='Enter 0 1 2 4 8 12  ',  
  2.                       ITEMS=(("0","每批/次"),("1","1H/次"),  
  3.                              ("2","2H/次"),("4","4H/次"),  
  4.                              ("6","6H/次"),("8","8H/次"),("12","12H/次"),  
  5.                              ("24","24H/次"));   
 COMBOBOX    tc_qcjj08  = FORMONLY.tc_qcjj08,COMMENTS ='Enter 0 1 2 4 8 12  ',
                       ITEMS=(("0","每批/次"),("1","1H/次"),
                              ("2","2H/次"),("4","4H/次"),
                              ("6","6H/次"),("8","8H/次"),("12","12H/次"),
                              ("24","24H/次")); 

一直很想试下动态绑定item值,今天正好写程序用到COMBOX,结果就试了下,

不是很难,主要是4gl代码实现。详细实现如下。

per画面定义一个COMBOX的组件

  1. COMBOBOX tc_qcjj01 = FORMONLY.tc_qcjj01 TYPE VARCHAR,NOT NULL,REQUIRED;  
COMBOBOX tc_qcjj01 = FORMONLY.tc_qcjj01 TYPE VARCHAR,NOT NULL,REQUIRED;

然后在4gl代码中写一个单独的函数来处理COMBOX中的item,代码如下:

  1. ##################################################  
  2. # Description   : 撷取彩妆分群码填充COMBOX  
  3. # Date & Author : 2012/09/26 by FMX  
  4. ##################################################  
  5. FUNCTION tc_qcjj01_cmd()  
  6.    DEFINE   li_gbi_count   SMALLINT  
  7.    DEFINE   lc_ima06       LIKE ima_file.ima06  
  8.    DEFINE   lc_imz02       LIKE imz_file.imz02  
  9.    DEFINE   lsb_item       base.StringBuffer  
  10.    DEFINE   lsb_item2      base.StringBuffer  
  11.    
  12.    LET lsb_item  = base.StringBuffer.create()  
  13.    LET lsb_item2 = base.StringBuffer.create()  
  14.    DECLARE l_cmdCurs2 CURSOR FOR  
  15.                       SELECT DISTINCT ima06,imz02   
  16.                       FROM ima_file,imz_file   
  17.                       WHERE ima06=imz01 AND imz02 LIKE '%彩妆%'  
  18.                       ORDER BY 1  
  19.    FOREACH l_cmdCurs2 INTO lc_ima06,lc_imz02  
  20.       CALL lsb_item.append(lc_ima06 CLIPPED || ",")  
  21.       CALL lsb_item2.append(lc_ima06 CLIPPED || " (" || lc_imz02 CLIPPED || "),")  
  22.    END FOREACH  
  23.    
  24.    CALL cl_set_combo_items("tc_qcjj01",lsb_item.toString(), lsb_item2.toString())  
  25. END FUNCTION  
##################################################
# Description   : 撷取彩妆分群码填充COMBOX
# Date & Author : 2012/09/26 by FMX
##################################################
FUNCTION tc_qcjj01_cmd()
   DEFINE   li_gbi_count   SMALLINT
   DEFINE   lc_ima06       LIKE ima_file.ima06
   DEFINE   lc_imz02       LIKE imz_file.imz02
   DEFINE   lsb_item       base.StringBuffer
   DEFINE   lsb_item2      base.StringBuffer
 
   LET lsb_item  = base.StringBuffer.create()
   LET lsb_item2 = base.StringBuffer.create()
   DECLARE l_cmdCurs2 CURSOR FOR
                      SELECT DISTINCT ima06,imz02 
                      FROM ima_file,imz_file 
                      WHERE ima06=imz01 AND imz02 LIKE '%彩妆%'
                      ORDER BY 1
   FOREACH l_cmdCurs2 INTO lc_ima06,lc_imz02
      CALL lsb_item.append(lc_ima06 CLIPPED || ",")
      CALL lsb_item2.append(lc_ima06 CLIPPED || " (" || lc_imz02 CLIPPED || "),")
   END FOREACH
 
   CALL cl_set_combo_items("tc_qcjj01",lsb_item.toString(), lsb_item2.toString())
END FUNCTION

cl_set_combo_items()函数是标准的系统共享函数,在这里也把代码贴出来: 

  1. # Prog. Version..: '3.10.06-07.03.05(00003)'     #  
  2. # Program name  : cl_set_combo_items.4gl  
  3. # Program ver.  : 7.0  
  4. # Description   : 动态设定ComboBox的Item.  
  5. # Date & Author : 2003/07/02 by Hiko  
  6. # Memo          :  
  7. # Sample    : CALL cl_set_combo_items("oea08", "1,2", "Local Order,Export Order")  
  8. # Modify    :  
  9. # Modify.........: FUN-640240 06/05/17 Echo 自动执行确认功能  
  10. # Modify.........: No:FUN-6C0017 06/12/13 By jamie 程式开头增加''database ds '  
  11.   
  12. DATABASE ds        #FUN-6C0017  
  13. GLOBALS "../../config/top.global"  
  14.   
  15. FUNCTION cl_set_combo_items(ps_field_name, ps_values, ps_items)  
  16.   DEFINE ps_field_name,ps_values,ps_items STRING  
  17.   DEFINE lcbo_target ui.ComboBox  
  18.   DEFINE lst_values,lst_items base.StringTokenizer  
  19.   DEFINE ls_msg      VARCHAR(100)  
  20.   
  21.   WHENEVER ERROR CALL cl_err_msg_log  
  22.   
  23.   #FUN-640240  
  24.   IF g_bgjob='Y' THEN  
  25.      RETURN  
  26.   END IF  
  27.   #END FUN-640240  
  28.   
  29.    #MOD-540134  
  30.   LET ps_field_name=ps_field_name.trim()  
  31.    #MOD-520002  
  32.   LET ps_values=ps_values.trim()  
  33.   LET ps_items=ps_items.trim()  
  34.   
  35.   LET lcbo_target = ui.ComboBox.forName(ps_field_name)  
  36.   
  37.   IF lcbo_target IS NULL THEN  
  38.     SELECT ze03 INTO ls_msg FROM ze_file WHERE ze01 = 'lib-031' AND ze02 = g_lang  
  39.     CALL cl_err(ps_field_name, "lib-031", 1)  
  40.     RETURN  
  41.   ELSE  
  42.     CALL lcbo_target.clear()  
  43.   END IF  
  44.   
  45.   LET lst_values = base.StringTokenizer.create(ps_values, ",")  
  46.   LET lst_items = base.StringTokenizer.create(ps_items, ",")  
  47.   
  48.   WHILE lst_values.hasMoreTokens()  
  49.     CALL lcbo_target.addItem(lst_values.nextToken(), lst_items.nextToken())  
  50.   END WHILE  
  51. END FUNCTION  
# Prog. Version..: '3.10.06-07.03.05(00003)'     #
# Program name	: cl_set_combo_items.4gl
# Program ver.	: 7.0
# Description	: 动态设定ComboBox的Item.
# Date & Author	: 2003/07/02 by Hiko
# Memo        	:
# Sample	: CALL cl_set_combo_items("oea08", "1,2", "Local Order,Export Order")
# Modify   	:
# Modify.........: FUN-640240 06/05/17 Echo 自动执行确认功能
# Modify.........: No:FUN-6C0017 06/12/13 By jamie 程式开头增加''database ds '

DATABASE ds        #FUN-6C0017
GLOBALS "../../config/top.global"

FUNCTION cl_set_combo_items(ps_field_name, ps_values, ps_items)
  DEFINE ps_field_name,ps_values,ps_items STRING
  DEFINE lcbo_target ui.ComboBox
  DEFINE lst_values,lst_items base.StringTokenizer
  DEFINE ls_msg      VARCHAR(100)

  WHENEVER ERROR CALL cl_err_msg_log

  #FUN-640240
  IF g_bgjob='Y' THEN
     RETURN
  END IF
  #END FUN-640240

   #MOD-540134
  LET ps_field_name=ps_field_name.trim()
   #MOD-520002
  LET ps_values=ps_values.trim()
  LET ps_items=ps_items.trim()

  LET lcbo_target = ui.ComboBox.forName(ps_field_name)

  IF lcbo_target IS NULL THEN
    SELECT ze03 INTO ls_msg FROM ze_file WHERE ze01 = 'lib-031' AND ze02 = g_lang
    CALL cl_err(ps_field_name, "lib-031", 1)
    RETURN
  ELSE
    CALL lcbo_target.clear()
  END IF

  LET lst_values = base.StringTokenizer.create(ps_values, ",")
  LET lst_items = base.StringTokenizer.create(ps_items, ",")

  WHILE lst_values.hasMoreTokens()
    CALL lcbo_target.addItem(lst_values.nextToken(), lst_items.nextToken())
  END WHILE
END FUNCTION

此函数写好后,在MAIN函数中直接调用即可。运行效果如下图:

有兴趣的可以试试大笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值