在PB 中 巧 用 下 拉 数 据 窗 口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在PB 中巧用下拉数据窗口
---- PowerBuilder 作为目前比较流行的一种开发工具,有其独到之处,那就是数据窗口(DataWindow)。可以说,数据窗口是PowerBuilder 的核心,在对数据库的开发过程中,无论是录入、查询、统计还是报表,都离不开数据窗口。但是,除了数据窗口,PB 还提供了下拉数据窗口(DropDown DataWindow),下拉数据窗口的使用,使数据窗口更灵活,更方便,下面举例介绍在数据窗口中使用下拉数据窗口的一些技巧。
---- 在用数据窗口作数据录入时,经常用到代码录入,即对经常输入的某些值设置代码,录入时直接录入代码即可。例如,有两个表,主表main_table 和代码表code_table,结构如下:
main_table
字段名类型长度描述
Id integer 标识号
Name char 8 姓名
Sex char 4 性别
City Varchar 30 城市
Unit Varchar 40 单位
---- 下面,详细讨论如何使用下拉数据窗口:
一、静态设计下拉数据窗口
---- 首先对主表和代码表设计两个数据窗口dw_main 和dw_code,其中dw_main 包括字段id,name,sex,city 和unit;dw_code 包括字段code 和data。假设unit 字段有几个常用值可使用代码录入,则在设计dw_main 时,用鼠标右键点击字段unit,在下拉菜单中选择Properties...(属性),则系统会弹出unit 列的属性对话框,在其中选择Edit (编辑)项,并在Style(风格)下拉列表框中选择DropDownDW 项,然后在下面的Options(选项)框中作具体的选项配置:在DataWindow 下拉框中选择已设计好的代码数据窗口dw_code 作为下拉数据窗口;在DisplayColumn(显示列)下拉框中选择code 字段;在Data Column(数据列)下拉框中选择data 字段,这表示显示的是code 字段的内容,而实际存于表main_table 中的是data 字段的内容。至此,数据窗口设计完毕。
---- 设计完数据窗口后,需要建立一个数据录入的窗口(window),名字为w_input,在窗口w_input 上建立一
个数据窗口的控件dw_1,其属性DataWindow Object Name 为dw_main。并在w_input 的open 事件中写入下列语句:
dw_1.SetTransObject(SQLCA)
dw_1.Retrieve()
---- 这样,在执行此窗口时,在unit 字段上就会出现一个下拉列表框,列出了表code_table 中所有的内容,用户可以用鼠标选择录入。
二、动态改变SQL 语句
---- 在上面的例子中,如果表main_table 中的字段city 也需要代码录入,则还需为city 字段新建一个表,这样很麻烦,因为有几个字段需要代码,就须有几个表与之对应。我们可利用下拉数据窗口的一些特点减少麻烦。对此,可以相应地修改表code_table 的结构,加一个字段field(char(30)),以存储需要代码的字段名,这样,就可利用SQL 语句对之进行检索,以得到某字段的所有代码。具体实现如下:重新设计数据窗口dw_code,把field 字段加上并使它不可见(因为用户不需要见到该字段的内容),数据窗口dw_main 和窗口w_input 的设置如上,只是在数据窗口dw_1 中需
要进行一些编程,具体是在ItemFocusChanged 事件中,加入如下的代码:
String ls_sql
Integer rtncode
DataWindowChild field_child
//dwo为该事件的参数,
其name属性的值表示获得焦点的字段名
Choose Case lower()
Case 'city' //city字段获得焦点
//获得city字段下拉数据窗口的句柄
rtncode = dw_1.GetChild("city",field_child)
If rtncode = -1 Then MessageBox( "Error", "Not a DataWindowChild")
//设置事务对象
field_child.SetTransObject(SQLCA)
//获得下拉数据窗口的SQL语句
ls_sql = field_child.GetSQLSelect()
//重新设置SQL语句,加上Where条件
ls_sql = ls_sql + " Where field = '" + + "'"
field_child.SetSQLSelect(ls_sql)
//取得满足条件的数据
field_child.Retrieve()
Case 'unit' //unit字段获得焦点
//获得unit字段下拉数据窗口的句柄
rtncode = dw_1.GetChild("unit",field_child)
......(此处编程同上一样)
End Choose
三、动态设置取值参数
---- 上例中,是采用动态改变SQL 语句实现的,其实,下拉数据窗口有一种更简单的方法就是设置取值参数(Retrieval Arguments)但这种方法适合从固定表中取数据,如果是从动态表(即表名不固定)中取数据,则只能通过改变SQL 语句来实现。
---- 修改数据窗口dw_code,在图形方式下,选择Design 菜单下的Retrieval Arguments...,设置取值参数的类型为String,名字可任取,假设为field_data,然后在窗口下面的Where 标签中选择Column 为"code_table.field",Operator 为" =",Value 为取值参数的值:field_data( 变量名前加冒号表示该变量的值),至此,取值参数设置完毕。同上例,也需要在窗口w_input 中的数据窗口控件dw_1 中的ItemFocusChanged 事件中进行如下的编程:
Integer rtncode