荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: huanghm (东方不败), 信区: Program
标 题: 实现多层次关系数据和主/细目型树状浏览器
发信站: BBS 荔园晨风站 (Tue Jun 2 05:34:09 1998), 转信
本文以一个多媒体档案管理的应用系统为例,介绍了
利用PowerBuilder 5.0的Tree—View、DataStore和DragD
rop等高技术手段进行信息系统中常见的多层次关系的主/
细目数据快速浏览检索的实现方法。该例中的对象设计及
其相应事件脚本均已调试运行通过,在其他类似应用项目
的数据检索中具有一定的通用性。
1.使用数据存储的树状浏览器的实现
定义一个主窗口,在其上设置一个TreeView控件tv—
1,利用两个后端数据存储(DataStore)对象ds—1、ds
—2分别连接两个数据窗口对象dw—ajml和dw—wjml,用来
提取具有层次关系的两个数据库表(案卷目录表和文件目
录表)中的纲要数据。给该窗口打开事件编写脚本程序,
使树状浏览控件tv—1具有“案卷年度”、“案卷题名”
、“文件题名”三层树状显示结构,如图1左半部所示。程
序如下:
Window:W—main(主窗口,注:脚本中所有未定义变
量均为全局变量,下同。)
//Script for: open event
datastore ds—1,ds—2
ds—1=create datastore ds—1.dataobject=
″dw—ajml″
ds—1.settransobject(sqlca) ds—1.retrieve()
ds—2=create datastore ds—2.dataobject=
″dw—wjml″
ds—2.settransobject(sqlca) ds—2.retrieve()
long xtn,xtnn int row1,row2
treeviewitem xtt int i,k
string ajhm,lnd tv—1.setredraw(fal
se)
tv—1.deleteitem(xt) xtt.label=″案卷
年度″
xtt.pictureindex=1 xtt.selectedpicture
index=1
xt=tv—1.insertitemlast(0,xtt)
row1=ds—1.rowcount() row2=ds—2.rowcount(
)
for k=1 to row1 step 1
nd=ds—1.getitemstring(k,″nd″)
if nd<>lnd then
xtt.label=nd xtt.pictureindex=4
xtt.selectedpictureindex=4
xtn=tv—1.insertitemlast(xt,xtt)
for i=1 to row1 step 1
ajhm=ds—1.getitemstring(i,″zjbh″)
if nd=ds—1.getitemstring(i,″nd″) t
hen
xtt.label=string(i,″000″)+ds—1.getitemstri
ng(i,″ajtm″)
xtt.pictureindex=2
xtt.selectedpictureindex=2
xtnn=tv—1.insertitemlast(xtn,xtt)
for j=1 to row2 step 1
if ajhm=ds—2.getitemstring(j,″zjbh″)
then
xtt.label=string(j,″000″)+ds—2.getitemstri
ng(j,″wjbt″)
xtt.pictureindex=3
xtt.selectedpictureindex=3
tv—1.insertitemlast(xtnn,xtt) end if
next end if
next lnd=nd else lnd=nd end if
next tu—1.stredraw(true)
在窗口中再设立一个“展开”命令按钮(cb—1),用
于对TreeView中的层次型纲要数据一次性全面展开,只需
对其clicked事件写一句脚本:
tv—1.expandall(xt)
2.利用拖放技术进行细目数据显示
在主窗口TreeView右边并列设置一个数据窗口控件dw
—1,该控件用来显示两个分级数据表中某条记录的详细
信息,根据用户拖动的是TreeView中的“案卷题名”还是
“文件题名”决定提取哪个表中数据,为此需在TreeView
的拖动开始事件中对所选数据进行判断。若是选中了“案
卷年度”,则禁止拖动;若选中了“案卷题名”,则使数
据窗口控件dw—1连接案卷信息数据窗口对象(dw—ajml),
并且共享数据存储对象已提取出的数据信息,根据选中的
纲要数据将数据窗口控件中的数据行滚动到所选行号并显
示其详细信息;若选中的是“文件题名”,则使dw—1连
接文件信息数据窗口对象(dw—wjml),同样以共享数据存
储的办法显示相应的文件详细信息,程序最终运行界面如
图1所示。这个过程需要分别对tv—1控件的拖动开始(beg
indrag)和dw—1控件的拖动释放(dragdrop)事件编制脚
本程序。
TreeView:tv—1(树状浏览控件)
//Script for: begindrag event
this.dragauto=true
treeviewitem tree
getitem(handle,tree)
if tree.level=4 then yky=3 i—s=handl
e
else if tree.level=3 then yky=2 i—s1=han
dle
else this.drag(cancel!) end if
end if
在数据窗口控件dw—1“拖动释放”事件的脚本程序
中进行数据窗口对象的选择和数据行的滚动,程序如下:
DataWindow:dw—1(细目显示数据窗口控件)
//Script for: dragdrop event
treeview treeview—object treeviewite
m tree
treeview—object=draggedobject() choose case
yky
case 3
treeview—object.getitem(i—s,tree)
dw—1.dataobject="dw—wjml" dw—1.title="文
书文件信息"
dw—1.settrans(sqlca) ds—2.sharedata
(dw—1)
long i,t
i=long(left(tree.label,3))
dw—1.scrolltorow(i)
case 2
treeview—object.getitem(i—s1,tree)
dw—1.dataobject="dw—ajml"
dw—1.title="文书案卷信息"
dw—1.settrans(sqlca)
ds—1.sharedata(dw—1)
t=long(left(tree.label,3))
dw—1.scrolltorow(t)
end choose
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.25]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店