当前位置:首页>> PowerBuilder>> PB技巧

全文搜索

精华导读

·EasyERP2004 制造行业通用性ERP管理系统
·PB中表的修改对数据窗口和报表的影响的解决办法
·在PB中实现Word内容的替换
·office xp风格菜单基本版
·用PB制作outlook界面源程序(非原来的老外版本)(
·将所见dw内容(包括计算字段)输出到execl中
·ERP在中国应用面临的问题
·PB中使用FORMULA ONE(实例篇
·控制打印机的动态库,兼容win98/98/me/nt2000/xp
·易佳自定义报表系统
·用例驱动的需求过程实践

最新发表

·仿windows优化大师界面(源码)
·常见问题的经典解决之SPLITBAR
·pb技巧
·PowerBuilder 10 Beta1下载和相关信息
·如何在pb9中调用WebService
·在非PB9 JSP Target的jsp网页中调用EAServer组件
·质量管理的十三项步骤和八项原则
·用预测性对象点度量面向对象软件(下)
·用预测性对象点度量面向对象软件(上)
·软件开发度量及考核方法
·点度量(4)—最新发布度量方法及参考
·点度量(3)—功能规模度量方法选择
·点度量(2)—功能规模度量方法评价
·点度量(1)—功能规模度量方法概述
·如何对软件质量进行评估
·从印度软件项目管理谈我国软件质量保障
·步步为营,把好质量关
·软件产品的可用性的测试
·软件测试认识的几个误区

PB 下 使 用TreeView 控 件 实 现 多 级 分 类 检 索

文章来源:互联网络 文章编辑:admin 添加时间:2004-2-4

PowerBuilder 中 的TreeView 控 件 为 树 状 列 表, 其 特 点 是 信 息 项 呈 树 状 层 次 结 构, 且 形 式 灵 活, 可 展 开 也 可 回 缩, 使 用 鼠 标 进 行 控 制, 操 作 简 便。 因 此 在 应 用 中, 可 将 其 与DataWindow 配 合, 一 个 提 供 信 息 的 分 类 体 系, 一 个 提 供 具 体 信 息, 实 现 信 息 的 多 级 分 类 检 索, 这 样 可 大 大 地 方 便 查 询, 提 高 系 统 的 实 用 性。

---- 在PowerBuilder 下,TreeView 控 件 的 开 发 技 术 一 般 较 为 复 杂, 但 如 果 将 它 的 构 成 机 制 及 主 要 事 件、 函 数 领 会 清 楚, 掌 握 它 并 不 困 难。 下 面 就 是 使 用TreeView 控 件 实 现 多 级 分 类 检 索 涉 及 的 主 要 开 发 技 术。

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

---- TreeView 控 件 的 基 本 信 息 单 位 是TreeViewItem 项, 它 们 按 树 状 层 次 结 构 进 行 组 织( 如 图1 所 示), 每 个TreeViewItem 项 一 般 具 有 下 列 主 要 属 性:

---- Data:Any 类 型 数 据, 该 项 对 应 的 内 部 值。
---- Label:String 型 数 据, 该 项 对 应 的 显 示 文 字。

---- Children:Boolean 型 数 据, 为Ture 时 表 示 该 项 还 有 下 一 层( 如 图1 中 项item1), 为False 时 表 示 该 项 没 有 下 层, 不 能 被 展 开( 如 项item111)。

---- PictureIndex:Integer 型 数 值, 该 项 对 应 的 正 常 图 标 在 图 标 队 列 中 的 编 号。

---- SelectedPictureIndex:Integer 型 数 值, 该 项 对 应 的 选 中 图 标 在 图 标 队 列 中 的 编 号。

---- 通 过TreeView 控 件 查 阅 信 息, 首 先 要 将 信 息 转 化 成 相 应 的TreeViewItem 项, 插 入 到TreeView 控 件 中。 这 个 工 作 可 借 助PB 提 供 的 函 数 来 完 成。

二、TreeView 控 件 实 现 多 级 分 类 检 索 涉 及 的 主 要 事 件

---- 让TreeView 控 件 和DataWindow 配 合, 完 成 信 息 的 多 级 分 类 检 索, 开 发 过 程 主 要 涉 及 下 列 三 个TreeView 事 件:

---- Constructor 事 件: 该 事 件 在 控 件 创 建 时 触 发

---- 选 中 该 事 件 主 要 用 来 插 入 第 一 层TreeViewItem 项, 这 样 用 户 一 进 入 检 索 界 面, 第 一 层 信 息 项 就 会 出 现 在 控 件 中。

---- ItemPopulate 事 件: 该 事 件 在 某TreeViewItem 项 第 一 次 展 开 时 触 发, 触 发 的 同 时 系 统 会 将 该TreeViewItem 项 的 句 柄 通 过 参 数handle 传 递 过 来。

---- 选 中 该 事 件 主 要 用 来 插 入 当 前TreeViewItem 项 对 应 的 下 层 信 息 项。 选 择 这 个 事 件 插 入 下 层 信 息 项, 开 发 时 只 需 考 虑 插 入 本 项 的 直 属 下 层, 不 必 去 管 下 层 的 下 层, 可 大 大 简 化 开 发 工 作; 另 外, 由 于 用 户 在 执 行 查 询 时 一 般 只 涉 及 一 些 个 别 类, 那 些 没 有 涉 及 的 信 息 类 没 有 展 开, 因 而 没 有 必 要 建 立 下 层 信 息 项, 在 这 里 做 到 了, 因 此 改 善 了 应 用 的 执 行 效 率。

---- SelectionChanged 事 件: 该 事 件 在 每 次 变 更 选 择 项 后 触 发, 触 发 的 同 时 系 统 会 将 变 更 前 后 选 择 项 的 句 柄 通 过 参 数oldhandle、newhandle 传 递 过 来。

---- 选 中 该 事 件 主 要 用 来 控 制DataWindow 显 示 当 前 信 息 类 的 内 容。 这 样 每 次 在TreeView 控 件 中 选 中 一 个 信 息 项,DataWindow 即 刻 将 其 详 细 信 息 显 示 出 来。

三、 具 体 应 用 实 例

---- 笔 者 曾 参 与 开 发 了 一 套 医 院 信 息 管 理 系 统, 其 中 当 前 有 效 医 嘱 分 类 检 索 就 是 采 用TreeView 控 件 和DataWindow 配 合 完 成 的, 图2 就 是 它 的 操 作 界 面。

---- 界 面 上 的TreeView 控 件 按 多 级 分 类 体 系 给 出 了 当 前 所 有 有 效 医 嘱 项 目, 每 在 其 中 选 中 一 个 医 嘱 项 目, 旁 边 的DataWindow 即 会 列 出 实 施 该 项 医 嘱 的 病 人 清 单, 并 给 出 人 数 统 计 结 果。 其 中 医 嘱 项 目 的 分 类 是 这 样 进 行 的: 首 先 根 据 医 嘱 的 性 质 进 行 了 一 级 分 类, 分 为 长 期、 临 时 两 大 类; 在 一 级 分 类 的 基 础 上 又 根 据 医 嘱 的 种 类 进 行 了 二 级 分 类, 长 期 医 嘱 分 为 药 物 类、 护 理 类, 临 时 医 嘱 分 为 药 物 类、 护 理 类、 检 查 类; 在 二 级 分 类 的 基 础 上 又 根 据 医 嘱 的 具 体 类 型 进 行 了 三 级 分 类, 药 物 类 分 为 口 服、 肌 肉 注 射、 静 脉 点 滴 等 类, 护 理 类 分 为 特 护、 一 级 护 理、 二 级 护 理 等, 检 查 类 分 为 各 类 具 体 检 查, 由 此 形 成 了 三 级 分 类 体 系。

---- 为 了 简 化 编 程, 窗 口 上 又 增 设 两 个DataStore 对 象--ds_yzzl 和ds_yzjtzl, 其 中ds_yzlx 的 作 用 是 根 据 医 嘱 性 质 到 库 中 提 取 当 前 医 嘱 种 类, 而ds_yzjtlx 则 是 根 据 医 嘱 性 质、 种 类 到 库 中 提 取 当 前 有 效 医 嘱 的 具 体 类 型。

---- 下 面 即 是3 个 事 件 的 对 应 脚 本:

TreeView 控件Constructor 事件
TreeViewItem  tv_new

---- // 建 立 一 个 图 标 队 列, 供 其 中 的TreeViewItem 项 引 用, 在 这 里 建 立 主 要 是 为 了 能 够 控 制 图 标 大 小

// 首 先 设 定 图 标 显 示 尺 寸
This.PictureHeight=15
This.PictureWidth=16

---- // 图 标 队 列 由4 个 图 标 构 成, 前3 个 用 于 标 识 医 嘱 类 项 目 的 级 别, 第4 个 用 于 标 识 项 目 的 选 中 状 态

This.AddPicture("DosEdit5! ")
This.AddPicture("custom023!")
This.AddPicture("custom036!")
This.AddPicture("Custom050!")

---- // 建 立 第 一 级 医 嘱 类 项 目, 本 级 项 目 共 两 个, 一 个 是 长 期 医 嘱 项 目, 一 个 是 临 时 医 嘱 项 目

tv_New.Label='长期医嘱'
tv_New.Data='0'
tv_New.PictureIndex=1
tv_New.SelectedPictureIndex=4
tv_New.Children=True
This.InsertItemLast(0, tv_New)
tv_New.Label='临时医嘱'
tv_New.Data='1'
This.InsertItemLast(0, tv_New)
TreeView控件的ItemPopulate事件
Integer		Level, n, I
string		Parm1, Parm2
Long		11_Parent
TreeViewItem	tv_Current, tv_Parent, tv_New
//由句柄获得TreeViewItem项,存入变量tv_Current
GetLtem(handle, tv_Current)
Level=tv_Current, Level+1
tv_New. PictureIndex=Level
tv_New.SelectedPictureIndex= 4
//根据展开级别,建立当前展开项目
CHOOSE CASE Level
CASE 2
//展开第2级医嘱类项目
tv_New.Children=True
Parm1= tv_Current, Data
//通过ds_yzzl检索当前项目类所具有的医嘱种类
n= ds_yzzl.Retrieve(Parm1)
//依次到ds_yzzl中提取医嘱种类,建立该项目
FOR i=1 TO n
//取ds_yzzl中zl字段的显示内容和内部值,
     作为这里对应项的显示文字和内部值
tv_New.Label=ds_yzzl.Describe("evaluate
      ('lookupdisplay(zl)',"+ string(i)+")")
tv_New.Data=ds_yzzl.GetItemString(i, 'zl')
This.InsertItemLast(handle, tv_New)
NEXT
CASE 3
//展开第3级医嘱类项目
tv_New.Children=false
//由句柄获取其父项的句柄
11_Parent=FindItem(ParentTreeItem!,handle)
GetItem(11_Parent, tv_Parent)
Parm1=tv_Parent.Data
Parm2=tv_Current.Data
//通过ds_yzjtlx检索当前医嘱类所具有的具体医嘱类型
n=ds_yzjtlx.retrieve(Parm1, Parm2)
//依次到ds_yzjtlx中提取具体医嘱类型,建立该项目
FOR i=1 TO n
tv_New.Label=ds_yzjtlx.Describe("evaluate
     ('lookupdisplay(jtlx)',"&+ string(i)+")")
tv_New.Data= ds_yzjtlx.GetItemString(i,'jtlx')
    This.InsertItemLast(handle, tv_New)
NEXT
END CHOOSE
TreeView控件的SelectionChanged事件
integer		Level,
string		Parm1, Parm2, Parm3
long		     11_Parent
TreeViewItem	     tv_Current, tv_ Parent
GetItem(newhandle, tv_Current)
Level=tv_Current.Level
//判断当前项目是否为第3级医嘱类,
 如是让旁边的DataWindow列出实施该项医嘱的病人清单
//否则,将其置空。
IF Level=3 THEN
   11_Parent=FindItem(ParentTreeItem!,newhandle)
   getitem(11_Parent, tv_Parent)
   Parm2=tv_Parent.data
   11_Parent=FindItem(ParentTreeItem!, 11_Parent)
   GetItem(11_Parent, tv_Parent)
   Parm1=tv_Parent.data
   Parm3=tv_Current.data
   dw_1.SetFilter("xz='"+Parm1"'and zl'"
     +parm2+"'and jtlx='+Parm3+"'")
   dw_1. Filter()
ELSE
   dw_1.SetFilter('1=2')
   dw_1. Filter()
END IF

---- 至 此,TreeView 控 件 涉 及 的 开 发 工 作 宣 告 完 成。

-

[ ]

首页 评论 打印 刷新 返回顶部 关闭
【相关文章】  【相关评论】
PB中表的修改对数据窗口和报表的影响的解决办法
PowerBuilder 9.0白皮书