当前位置: 代码迷 >> PB >> pb的中上拉列表的有关问题
  详细解决方案

pb的中上拉列表的有关问题

热度:27   发布时间:2016-04-29 07:42:28.0
pb的中下拉列表的问题
问题描述:
比如有两个表:记录系名的表 t1(比如:计算机系,外语系),记录专业名的表t2(网络,软工,英语,德语)

在窗口中又俩个下拉列表:第一个下拉列表显示表t1的内容,  关键在第二个下拉列表:要求是选计算机系下拉列表2中只能出现网络和软工,选外语系下拉列表2中只能出现英语和德语


谁给下代码最好!!!
------解决方案--------------------
新建一个数据窗口,用外部数据源,放两个列(col_1, col_2),编辑格式为下拉数据窗口

然后在数据窗口的itemchanged事件里写代码


if dwo.name = 'col_1' then
  datawindowchild ldwc_2
  this.getchild('col_2', ldwc_2)
  ldwc_2.settransobject(sqlca)
  ldwc_2.setfilter("col_1 = '" + data + "'")
  ldwc_2.filter()
end if
------解决方案--------------------
可使用游标对下拉列表的选项初始化:
第一步:
 在窗口open事件中编写以下代码:
ddlb_1.reset() 
string ls_xm,ls_zym 
//使用游标提取系名称初始化ddlb_1(系名下拉列表)
Declare  xm_cur cursor For Select 系名 From t1; 
Open xm_cur;
Fetch xm_cur into :ls_xm;
IF SQLCA.SQLCode=0 Then
  ddlb_1.addItem(ls_xm)
  ddlb_1.text=ls_xm
  DO While SQLCA.SQLCode=0
    Fetch xm_cur into :ls_xm ;
    IF SQLCA.SQLCode=0 Then
      ddlb_1.addItem(ls_xm)
    END IF
  Loop
END IF
Close xm_cur;

//使用游标提取专业名称初始化ddlb_2
ls_xm=ddlb_1.text
ddlb_2.reset()
Declare  zym_cur cursor For Select 专业名 From t2 where 系名= :ls_xm ; 
Open zym_cur;
Fetch zym_cur into :ls_zym;
IF SQLCA.SQLCode=0 Then
  ddlb_2.addItem(ls_zym)
  ddlb_2.text=ls_zym
  DO While SQLCA.SQLCode=0
    Fetch zym_cur into :ls_zym ;
    IF SQLCA.SQLCode=0 Then
      ddlb_2.addItem(ls_zym)
    END IF
  Loop
END IF
Close zym_cur;

第二步:
在ddlb_1控件的selectionchanged事件中编写以下代码:
string ls_xm,ls_zym
ls_xm=this.text
ddlb_2.reset()
Declare  zym_cur cursor For Select 专业名 From t2 where 系名= :ls_xm ; 
Open zym_cur;
Fetch zym_cur into :ls_zym;
IF SQLCA.SQLCode=0 Then
  ddlb_2.addItem(ls_zym)
  ddlb_2.text=ls_zym
  DO While SQLCA.SQLCode=0
    Fetch zym_cur into :ls_zym ;
    IF SQLCA.SQLCode=0 Then
      ddlb_2.addItem(ls_zym)
    END IF
  Loop
END IF
Close zym_cur;
IF ddlb_2.totalitems()>0 THEN //判断ddlb_2是否有选项
 ddlb_2.Enabled=true
ELSE
 ddlb_2.Enabled=false
END IF
请楼主不妨一试,见笑了!
  相关解决方案