其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

在powerbuilder中使下拉列表框可以和数据关联


发布日期:2021年07月07日
 
在powerbuilder中使下拉列表框可以和数据关联

在从事使用powerbuilder进行数据库开发的过程中常常碰到要使用列表框来选择数据但是普通的下拉列表框并没有提供和数据相连接的方法而使用数据窗口的子下拉列表框来代替又显得有些别扭下面介绍一种好看又好用的方法

如果使用指针把要连接的数据一条一条地从select 语句的查询结果中fetch 出来然后再把数据additem到下拉列表框中去虽然这也是一种可行的方法但是他的速度不能令人满意太受数据量的影响我们可以利用powerbuilder 最推崇的数据窗口技术作为数据库和下拉列表框连接的桥梁这种方法即方便快速又安全可靠

下面制作的下拉列表框

打开powerbuilder的select user object画笔选择new user object中选择Visual类的Standard项并按下 在弹出来的Select Standard Visual Type对话框中选择列表中的 dropdownlistbox项并按下接着加入一些实例变量选择Declare菜单项的Instance Variables加入变量的声明 datastore ids_user int il_row 并按下

我们要对新的对象进行一些限制在对象的constructor事件中加入程序

sorted = false //这句非常必要

reset()

把数据检索出来放到ids_user变量里

选择菜单Declare项的User Object Function在弹出来的对话框中按下新建一个对象函数命名为init

参数有一个

sqlstr string

返回值为整型integer

现在我们需要动态地创建datastore

在init函数中写下

//integer init(sqlstr string) 开始

long ll_rowcount

long ll_row

string ls_sql

string errors

string ls_return

ids_user = create datastore

//根据sql语句产生数据窗口

ls_return = sqlcaSyntaxFromSQL(sqlstr style(type=grid)errors)

//sql语句有错误

if len(errors) > then

messagebox(错误 errors)

return

end if

//根据语法动态创建数据窗口

ids_usercreate(ls_return)

ids_usersettransobject(sqlca)

ll_rowcount = ids_userretrieve()

//无数据返回

if ll_rowcount= then

return

end if

//把数据插入控件

for ll_row = to ll_rowcount

thisadditem(string(ids_userObjectData[ll_row]))

next

//成功返回

return

//integer init(sqlstr string) 结束

现在下拉列表框已经能显示数据了但是我们在选择数据的同时往往需要的不是它显示出来的值比如显示的是人员姓名而我们需要的是工号难道再使用select语句把需要的数据检索出来吗?有了下面的程序我们就不必头痛了

重复上面建立函数的步骤新建一个名为getdata的user object函数返回值为any并在函数中写下程序

//any getdata() 开始

any la_return

long ll_row

if text = then

return

end if

//没有选择或没有检索到数据

if ids_userrowcount() = or il_row = then

return

end if

//在缺省情况下返回第二列的数据

la_return = ids_userObjectdata[il_row ]

return la_return

//andy getdata() 结束

现在还不能返回正确的数据还需要一个函数setidx(idx int)程序如下

//setidx(idx int) 开始

il_row = idx

//setidx(idx int) 结束

现在这个user object已经完成了我们来做一下试验试一试新建一个应用app_test一个窗口w_main按照刚才的方法创建一个user object:uo_dbdropdownlistbox放入w_main中

在app_test的open事件中写下连接数据库的语句并加上open(w_main)

在w_main的open事件中写下

int li_result

li_result = uo_init(select name id from sysobjects

在uo_的selectionchanged事件中写下setidx(index)

messagebox(提示 + string(thisgetdata()))

这时我们的用户对象已经能根据选择的name返回相应的id了

编辑推荐

数据仓库与数据挖掘培训视频教程

Microsoft NET框架程序设计视频教程

               

上一篇:在PowerBuilder11中部署SmartClient应用[1]

下一篇:用PowerBuilder制作指示灯