最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

4GL COMBOX动态绑定内容

开发相关 bron1984 3558浏览

一般的COMBOX我们一般的是直接在per里面写item属性,如下代码:

 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的组件

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

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

##################################################
# 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()函数是标准的系统共享函数,在这里也把代码贴出来: 

##################################################
# 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

 

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

有兴趣的可以试试

转载请注明:赫非域 » 4GL COMBOX动态绑定内容