|
P>作为目前比较流行的数据库前端开发工具,PowerBuilder显著的一个特点就是其数据窗口(DataWindow)技术。为了更灵活地使用数据窗口,PB还提供了下拉数据窗口(DropDownDataWindow,以下简称dddw)。灵活使用dddw可使程序录入、查询的界面更加友好,大大减小编程的难度。
有时候,数据窗口中的某一列的dddw需要根据条件的变化来回变换,即随条件的变化显示不同dddw的内容,且原dddw与变换后的dddw都带有检索参数,采用《计算机世界》99年3月22日刊登的《PB中隐藏下拉数据窗口的检索参数》一文中介绍的方法也不能抑制检索参数窗口的弹出。查阅Sybase网上技术文档(Document号为44434),谈到两个dddw的切换时说:抑制检索参数窗口的方法(见Document号为44307,即上文采用的方法)不适用于两个dddw替换的情况,除非两个dddw的定义非常相近,不需要重新检索。如果两个dddw的定义不同,dw引擎决定需要重新检索时没有办法抑制检索参数窗口的弹出。
在应用中有时确实需要两个dddw相互切换,显示不同的内容以方便用户的使用,如下图中所示的字段“同类设备编码”,查询状态时dddw显示具有该编码的设备的技术参数,其检索参数为其自身值;当用户按修改按钮后,此字段的dddw显示所有设备编码及各编码代表设备的名称、规格和型号,此时的dddw以“分类代码”为检索参数,两个dddw定义完全不同,分别检索不同的表。
在“修改”按钮中切换dddw的脚本如下:
dw_1.object.equipment_account_equip
_id.dddw.name = "d_dddw_equip_id"
dw_1.object.equipment_account_equip
_id.dddw.percentwidth = 450//设定显示宽度
dw_1.object.equipment_account_equip
_id.dddw.vscrollbar = "yes"//设定纵向滚动条
dw_1.getchild ("equipment_account_equip_id",idw_child)
//改变参数后必须重新getchild使改变后的属性生效
idw_child.settransobject (sqlca)
idw_child.retrieve(cl_id)//按分类代码检索
真的如上所述没有办法抑制检索参数了吗?其实有一个非常简单、适用于所有dddw的方法:
在DataWindow painter中打开此dddw,从菜单条选择
Rows→Data后单击Add按钮,在第一列任意输入一些字符,单击OK,再存盘退出;另一dddw也依此操作。这样看似及其复杂的问题轻而易举地解决了,如果一个数据窗口中用到多个dddw,可以省去许多类似下面的语句,使? 编制起来更快捷,程序可读性更好。
dw_1.getchild ("equip_item_equip_id",idw_child1)
idw_child1.settransobject (sqlca)
if idw_child1.rowcount() = 0 then
idw_child1.insertrow(0)
end if
以上方法在P200兼容机、Windows95平台上、PowerBuilder5.0上实现,完全可行。
|