注册 登录
编程论坛 VFP论坛

请教大佬,treeview递归加载树代码修改

laibinhua 发布于 2025-03-21 10:38, 485 次点击
请教大佬,一个表表tb1(有如下3个字段 id  parent_id  name) 把数据传入treeview控件中显示树,表做了个递归方法,这块要如何改,我这样写一直无法实现,要如何一下
只有本站会员才能查看附件,请 登录

【代码:】
* 按钮的 Click 方法
CREATE CURSOR tb1(id int,parent_id int,name varchar(50))
INSERT INTO tb1(id,parent_id,name) VALUES (1,0,'Root')
INSERT INTO tb1(id,parent_id,name) VALUES (2,1,'Child1')
INSERT INTO tb1(id,parent_id,name) VALUES (3,1,'Child2')
INSERT INTO tb1(id,parent_id,name) VALUES (4,2,'GrandChild1')
INSERT INTO tb1(id,parent_id,name) VALUES (5,3,'GrandChild2')
LOCAL lcRootKey
lcRootKey = "Root"
THISFORM.tvw1.Nodes.Clear()  && 清空 TreeView
THISFORM.tvw1.Nodes.Add(, , lcRootKey, "Root")  && 添加根节点
THISFORM.AddChildNodes(1, lcRootKey)  && 从根节点开始递归加载数据

*AddChildNodes表单方法
LPARAMETERS tnParentID, tcParentKey
    LOCAL lcKey, lcName
    SELECT tb1
    SCAN FOR parent_id = tnParentID  && 查找当前父节点的子节点
        lcKey = ALLTRIM(STR(tb1.id))  && 使用 id 作为节点的唯一键
        lcName = ALLTRIM(tb1.name)    && 获取节点名称
        THISFORM.tvw1.Nodes.Add(tcParentKey, 4, lcKey, lcName)  && 添加子节点
        THISFORM.AddChildNodes(tb1.id, lcKey)  && 递归调用,添加子节点
    ENDSCAN

[此贴子已经被作者于2025-3-21 11:03编辑过]

9 回复
#2
csyx2025-03-21 11:37
这句有问题
lcKey = ALLTRIM(STR(tb1.id))  && 使用 id 作为节点的唯一键
跟字段名命名规则一样,不能是数字开头,前面加个字母或下划线就行

#3
laibinhua2025-03-21 12:09
回复 2楼 csyx
谢谢回复,按你的方法改了后,加载不全少了内容,请问要如何改一下
只有本站会员才能查看附件,请 登录
#4
csyx2025-03-21 13:02
*AddChildNodes表单方法
LPARAMETERS tnParentID, tcParentKey
    LOCAL lcKey, lcName, nRec
    SELECT tb1
    SCAN FOR parent_id = tnParentID  && 查找当前父节点的子节点
        nRec = Recno()
        lcKey = '_' + ALLTRIM(STR(tb1.id))  && 使用 id 作为节点的唯一键
        lcName = ALLTRIM(tb1.name)    && 获取节点名称
        THISFORM.tvw1.Nodes.Add(tcParentKey, 4, lcKey, lcName)  && 添加子节点
        THISFORM.AddChildNodes(tb1.id, lcKey)  && 递归调用,添加子节点
        Goto (nRec)
    EndScan

#5
laibinhua2025-03-21 13:27
回复 4楼 csyx
牛,谢谢
#6
my23182025-03-21 15:19
可以分级加载,每次点击一个节点加载该节点的子节点
#7
wcx_cc2025-03-23 05:48
直接运行一个表,可以生成多级 tree,也容易理解和日后维护。用 select .. group by 分别生成一个个 cursor,每个cursor就是一层 tree 分支

 
  
#8
laibinhua2025-03-24 09:46
回复 7楼 wcx_cc
你好,你的思路能提供一个实例下载看吗?
#9
wcx_cc2025-03-25 23:45
抱歉!才看见信息,匆匆搞了个例子,do main 测试测试 vfp9
只有本站会员才能查看附件,请 登录


#10
laibinhua2025-03-28 13:49
回复 9楼 wcx_cc
十分谢谢
1