大家好,我有一个非常简单的tree问题,希望你们能帮帮我!!!

taoguang2 2003-01-06 09:25:45
在treeview中显示分层数据,数据表的内容是:
id name
01 西药
0101 抗微生物药
010101 影像诊断用药
010102 其他诊断用药
010103 清热泻火剂
010104 清脏腑热剂
0102 抗生素类抗感染药
010201 清热宣肺剂
010202 滋阴剂
010203 滋补肾阴
010204 滋补心肺
0103 氨基糖苷类
010301 温阳剂
010302 安神剂
02 中药
0201 四环素类
020101 疏肝解郁剂
020102 疏肝和胃剂
0202 酰胺醇类
020201 消导剂
020202 疏散外风
0203 大环内酯类
020301 散寒除湿通痹
020302 清热除湿通痹

我还是那个问题不明白:一个朋友给我写的代码,他在tv_1的itempopulate中写的部分代码
treeviewitem tvi2,tvi1
tvi2.pictureindex=1
tvi2.selectedpictureindex=3
this.getitem(handle,tvi1)
if tvi1.level=1 then
tvi2.data=ls_id
我都弄糊涂了,到底什么时候用tvi2,什么时候用tvi1?还有this.getitem(handle,tvi1)有什么作用??????????
整个itempopulate事件的代码如下:
string ls_name,ls_id
long i,ll_row
treeviewitem tvi2,tvi1
tvi2.pictureindex=1
tvi2.selectedpictureindex=3
datastore datatest
datatest=create datastore
datatest.dataobject='d_qw'
datatest.settransobject(sqlca)

this.getitem(handle,tvi1)
//messagebox("s",this.getitem(handle,tvi1))
if tvi1.level=1 then
ll_row=datatest.retrieve('00')

for i=1 to ll_row
ls_name=datatest.getitemstring(i,3)
ls_id=datatest.getitemstring(i,1)
tvi2.data=ls_id
tvi2.label=ls_name
tvi2.children=true
this.insertitemlast(handle,tvi2)
next
else
ll_row=datatest.retrieve(tvi1.data)
for i=1 to ll_row
tvi2.data=datatest.getitemstring(i,1)
tvi2.label=datatest.getitemstring(i,3)
tvi2.children=(tvi1.level<3)//假设最多有三层
this.insertitemlast(handle,tvi2)
next
end if
最后一个问题:上面的代码是假设有三层,但是实际肯定会有2层的时候,但它前面还有“+”,怎么才能去掉加号呢?
...全文
34 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingtao 2003-02-07
  • 打赏
  • 举报
回复
up
thc 2003-01-06
  • 打赏
  • 举报
回复
treeviewitem tree_item
this.getitem(handle,tree_item)
if tree_item.level<>2 then //如果不是第二级数据项
......
else
....
end if
jackygan 2003-01-06
  • 打赏
  • 举报
回复
你仔细看一下语句,对应你的数据,可以尝试如下做法:
if (有还有子层) then
tvi2.children=true
else
tvi2.children=false
end if
//当然,我没有看你具体的数据是怎样的,你可以想一下具体的判断。
sarvio 2003-01-06
  • 打赏
  • 举报
回复
可以采用递归算法按层次建立树。具体算法我想你自己可定能够搞定。
taoguang2 2003-01-06
  • 打赏
  • 举报
回复
我的程序中最多有3三层,但是你改为2,第三层数据就会没有了!
jackygan 2003-01-06
  • 打赏
  • 举报
回复
tvi2.children=(tvi1.level<3)//假设最多有三层,如果两层则改为<2.
taoguang2 2003-01-06
  • 打赏
  • 举报
回复
上面的代码是假设有三层,但是实际肯定会有2层的时候,但它前面还有“+”,怎么才能去掉加号呢?
我都弄糊涂了,到底什么时候用tvi2,什么时候用tvi1?
jackygan 2003-01-06
  • 打赏
  • 举报
回复
看回你所问的问题,我是不是一一给你对应回答了?
taoguang2 2003-01-06
  • 打赏
  • 举报
回复
楼上的大哥,谢谢你,不过我觉得你所回答的不是我问的呀!
taoguang2 2003-01-06
  • 打赏
  • 举报
回复
不明白
jackygan 2003-01-06
  • 打赏
  • 举报
回复
当所在项为第一层时用到tvi1,当所在项为第二层或更高层时用到tvi2.
tvi2.children=(tvi1.level<3)//假设最多有三层,如果两层则改为<2.
jackygan 2003-01-06
  • 打赏
  • 举报
回复
当选中某一单位类别后再生成并显示此类别下的所有单位,这就需要用到这个事件。
this.getitem(handle,tvi1) //使tvi1指向当前所在项.
taoguang2 2003-01-06
  • 打赏
  • 举报
回复
对不起,我忘写一个字段
code name father
00 药品名称 0
01 西药 00
02 中药 00
03 中西药 00
.......
0101 抗微生物药 01
0102 抗生素类抗感染药 01
0103 氨基糖苷类 01
...//01**
0201 四环素类 02
0202 酰胺醇类 02
...//02**
...//0***
010101 影像诊断用药 0101
010102 其他诊断用药 0101
010103 清热泻火剂 0101
...//以下同上
sarvio 2003-01-06
  • 打赏
  • 举报
回复
数据表的内容只有id和name这两个字段吗?
怎么体现分层啊?

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧