散分! 有谁能再仔细说一下treeview的遍历?

fmilan 2003-10-16 06:18:17
从datawindow中取出数据添加到treeview中,采取广度还是深度遍历?
特别是按层级展开,如果有多个层级,如三个以上,如何实现从datawindow添加到treeview中?
...全文
34 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
incats 2003-10-24
  • 打赏
  • 举报
回复
改写sql:
select * from dept connect by parentid = prior deptid start with parentid = 0;
出来的已经是树的形状了.
按parentid添加就是了.
fmilan 2003-10-24
  • 打赏
  • 举报
回复
有关多层级,按照每一个下级要一个datawindow检索一次数据,循环的话需要检索多次datastore;效率低下;
有没有好的算法?有关3层以上多层级的
wantsong 2003-10-18
  • 打赏
  • 举报
回复
自定义函数f_treenewchild 在传入树的节点上加入新树,深度遍历,前须遍历
/*参数:l_tvparent 传入的根节点
l_id 为传入根节点的data
l_parentrow为根节点对应的数据在dw中的位置
s_id 纪录dw中id的column名
s_parentid纪录dw中parentid的column名
s_name纪录dw中名称column的名,即在tv_main上显示的值
dw_main 传入的dw ,取数据的dw
tv_main 传入的tree
方法:dw中数据定义的字段为
id 当前数据的值
name 当前数据的显示值
parentid 父数据的值
注意:
在dw中按id排序,这样父数据总在子之前
根节点的parentid都为0
调用该函数,dw retrieve 一次,循环按每个根节点传入
*/
long l_parentid,i,ll_currenttv,l_parent,l_booksortid,l_thisid
treeviewitem ltvi_item,ltvi_test
for i = l_parentrow to dw_main.RowCount()
l_thisid = dw_main.GetItemNumber(i,s_id)
l_parentid = dw_main.GetItemNumber(i,s_parentid)
if l_parentid = 0 and l_thisid = l_id then //第一级构造
ltvi_item.children = false
ltvi_item.selectedpictureindex = 1
//显示值
ltvi_item.label = dw_main.getitemstring(i,s_name)
//ID
l_booksortid = dw_main.getitemnumber(i,s_id)
ltvi_item.data = l_booksortid
//图片
ltvi_item.pictureindex= 1
l_tvparent = tv_main.InsertItemLast(l_tvparent,ltvi_item)

end if
if l_parentid = l_id and l_id <> l_thisid then //下级构造
ltvi_item.children = false
ltvi_item.selectedpictureindex = 1
//显示值
ltvi_item.label = dw_main.getitemstring(i,s_name)
//ID
l_booksortid = dw_main.getitemnumber(i,s_id)
ltvi_item.data = l_booksortid
//图片
ltvi_item.pictureindex= 1
ll_currenttv = tv_main.InsertItemLast(l_tvparent,ltvi_item)
l_parent = i
f_treenewchild(ll_currenttv,l_booksortid,l_parent+1,s_id,s_parentid, &
s_name,dw_main,tv_main)
end if
next
return 1

qqjj7758 2003-10-18
  • 打赏
  • 举报
回复
比较容易
bomber2001 2003-10-18
  • 打赏
  • 举报
回复
看看数据结构
ishxb 2003-10-18
  • 打赏
  • 举报
回复
友情帮顶
关注
fmilan 2003-10-17
  • 打赏
  • 举报
回复
多层级应该是用深度遍历吗?多层在循环中反复用retrieve datawindow来取出子树的话似乎效率很低下;
结构是遍历同级(在同级中依次遍历子集),是不是这个思想?
klbt 2003-10-16
  • 打赏
  • 举报
回复
三个以上也可以添加,要按三个以上的列排序,对所有行从第一行到最后一行逐行搜索,发现“排序列”数值不同,则添加一个新的节点。

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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