数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
PB中TreeView控件使用技巧

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

PowerBuilder中的TreeView 控件为树状游览,类似于WINDOWS的资源管理器,其特点是信息项呈树状层次结构,能更清晰地表现主、细目关系 ,操作非常方便。在应用中可将其与DataWindow 配合使用, 一个提供信息的分类体系,一个提供具体信息,达到珠连碧合的奇妙效果。它特别适用于多级信息的分类检索, 是多级菜单所无法比似的,它的表现形式深受程序设计人员和广大用户的喜爱,在许多应用软件中都能看到她的英姿。

  在PowerBuilder下,TreeView 控件的应用较其它控件要复杂得多,刚接触它时往往有些不知所措。但如果将它的机理搞清楚,掌握它也不是很难的事。下面我结合长白公司图书分类检索的实例,把TreeView 控 件的使用方法和大家探讨一下。

  一、应用TreeView 控件的一般步骤

  1、 建立一个应用,并设好与数据库的接口,这是操作数据库的前提。

  2、 在应用中建一应用窗口W_1,在其上加入二个名为dw_3和dw_4的datawindow控制对象和一个名为TV_1的TreeView对象。

  3、 修改DW_3属性

  General:把Datawindow object name填写一个已存在的名为DW_date的datawindow(注意:它与datawindow控制对象是不同的),用于生成树视图项,将其Visible项设为不可见。

  4、 修改DW_4属性

  General:把Datawindow object name填写一个已存在的名为DW_TS的datawindow对象,用于显示查询出的具体内容。

  5、 编辑TV_1的属性

  TreeView的树视图项不能直接编辑,必须在Script中编写程序。

  Picture:在Picture Name中加入四个不同的图标,用于代表树视图中的两个层次(一、二级)、两种状态(未选、选中)。

  General:可根据具体应用设定是否选中,其中:

  Delete Items:运行中是否允许删除表项。

  Disable PragDrog: 运行中是否允许拖放表项。

  Edit Labels: 运行中是否允许单击表项来改变表项的标题。

  Show Buttons:是否在表项放显示+-按钮,有示相对的扩展和收缩。

  Hide Selection:当该控件失去焦点时,选中项是否以高亮度显示。

  Show Line:表项间是否加一竖线。

  Lines At Root:所有根层表项是否用竖线连接。

  Indentation:子表项相对于父表项的向右缩进度。

  6、 编写TV_1的Script

  这里是TreeView控件的关键,也是难点。

  二、TreeView 控件的信息构成及创建

  树视图项TreeViewItem是TreeView 控件的基本信息单位,树视图项的生成一般有二种方法,一种是先生成根层视图项,再在应用中动态生成下级视图项,另一种是把全部树视图项一次和成。两种方法各有优点,请根据具体情况选用,本例中采用后一种方法。

  1、 树视图项TreeViewItem的主要属性

  Label:String 型,树视图项的显示信息。

  Data:Any型,树视图项的内部值。

  Level:Integer型,树视图项在树视图中级别。

  Children:Boolean 型,它决定该项是否有下一层(如图中书名)。

  PictureIndex:Integer 型,该项非选中时所用的图标在图标队列中的编号。

  SelectedPictureIndex:Integer型,该项选中时所用的图标在图标队列中的编号。

  2、 生成TreeViewItem项用到的函数

  InsertItemFirst():将加入项作为第一项

  InsertItemLast():将加入项作为最后一项

  InsertItem():将加入项插入到指定项的后面

  InsertItemSort():按顺序放置。

  3、 TreeView的常用事件

  Constructor: 该事件在控件创建时触发,可在这里构造TreeViewItem。

  Click:单击TreeViewItem项时,执行查询程序。

  Double Click: 双击TreeViewItem项时,执行查询程序。

  ItemPopulate 事件: 该事件在某TreeViewItem项首次展开时触发, 触发的同时系统会将 该TreeViewItem项的句柄通过参数handle 传递过来。它主要用来生成对应项的下层信息项。主要用于第一种方法。

  三、 事件代码

  1、树视图控件TV_1的constructor事件代码 wanqi 1999.6.28

integer li_rowcount,li_row
string li_current_dn,li_last_dn,li_current_ei,li_last_ei
//声明二个树视图的实例变量
treeviewitem itvi_level_one,itvi_level_two
//long ii_h_l_one
//long ii_h_l_two
dw_3.settransobject(sqlca)//dw_3
为隐含的数据窗口,存有生成树的数据
li_rowcount=dw_3.retrieve()//行数
dw_3.setsort("lb,pm")
dw_3.sort()
//生成树视图的各级树视图项
for li_row=1 to li_rowcount
li_current_dn=dw_3.object.lb[li_row]
//DW_3对象中"LB类别"
li_current_ei=dw_3.object.pm[li_row]
//DW_3对象中"PM品名"
if isnull (li_current_ei) then
li_current_ei=""
end if

if li_current_dn< >li_last_dn then
//IF LB不与一级视图项重复
//设置一级树视图项
itvi_level_one.label=dw_3.object.LB[li_row]
//视图项的显示信息
itvi_level_one.level=1 //级别
itvi_level_one.data=li_current_dn
//视图项的内部信息
itvi_level_one.pictureindex=1
//没选中时所用的图标序号
itvi_level_one.selectedpictureindex=3
//选中时使用的图标序号
itvi_level_one.children=(li_current_ei< >' ')
//树视图是否有下一级
ii_h_l_one=this.insertitemlast(0,itvi_level_one)
//将项加入到一级树的最后一项
end if
//设置二级树视图项
if li_current_dn< >li_last_ei then
if li_current_ei<>' ' then
itvi_level_two.label=dw_3.object.pm[li_row]
itvi_level_two.level=2
itvi_level_two.data=li_current_dn
itvi_level_two.pictureindex=2
itvi_level_two.selectedpictureindex=4
itvi_level_two.data=li_current_ei
itvi_level_two.children=false
ii_h_l_two=this.insertitemlast
(ii_h_l_one,itvi_level_two)
//将项加入到二级树的最后一项
end if
end if
li_last_dn=li_current_dn//设比较项
li_last_ei=li_current_ei
next

  2、tv_1控件的clicked事件代码

string s1
treeviewitem ii
this.getitem(handle,ii)
s1=string(ii.label)

choose case ii.level
case 1
//过滤类别
dw_4.setfilter("lb='"+s1+"'")
dw_4.filter()
case 2
dw_4.setfilter("pm='"+s1+"'")
dw_4.filter()
//过滤书名
end choose




相关文章

相关软件