注册 登录
编程论坛 VFP论坛

如何实现表单中同一TreeView控件根据不同的表文件显示不同层次的节点

王咸美 发布于 2022-05-09 07:58, 2141 次点击
如何实现表单中同一TreeView控件根据不同的表文件显示不同层次的节点(如图),请高手赐教,万分感谢!!!
点击单选按钮“成绩汇总表”,调用表文件“成绩汇总表.dbf”,在左边控件中显示三层节点:年级、班级、性别;
点击单选按钮“班级课程表”,调用表文件“jsrkb20190101.dbf”,在左边控件中显示两层节点:年级、班级;
点击单选按钮“干部信息表”,调用表文件“干部信息汇总表.dbf”,在左边控件中显示一层节点:姓名
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
13 回复
#2
mywisdom882022-05-09 08:30
提示:
1.单个树,你是会了吧 ——》会了——》,单选按钮——》删除树——》从新加载树——》搞定了
#3
王咸美2022-05-09 09:29
不太懂,还请赐教!谢谢!!!
#4
fyyylyl2022-05-09 09:51
#5
王咸美2022-05-09 11:57
@fyyylyl 非常感谢热心指点。我想利用成绩汇总表.dbf显示三层节点,利用jsrkb.dbf显示两层节点,利用 干部信息汇总表.dbf只显示一层节点。请赐教!
#6
mywisdom882022-05-09 12:32
以下是引用王咸美在2022-5-9 09:29:38的发言:

不太懂,还请赐教!谢谢!!!

我看了你以前的,“个人课表查询”
这个就是删除树,清空
你只要选择一个,就把以前的树,删除,然后,再按照你以前的方法,加载书,就可以了

  
thisform.olecontrol1.Nodes.clear
SELECT distinct 部门 FROM jsmd20190101 into CURSOR temp
scan
thisform.olecontrol1.Nodes.Add(,,'部门'+ALLTRIM(部门),部门)
SELECT DISTINCT 姓名 FROM jsmd20190101 WHERE jsmd20190101.部门=TEMP.部门 INTO CURSOR TEMP1
SELECT TEMP1
SCAN
THISFORM.OLECONTROL1.Nodes.Add('部门'+ALLTRIM(temp.部门),4,'姓名'+ALLTRIM(temp.部门)+ALLTRIM(姓名),姓名)
ENDSCAN
USE IN TEMP1
SELECT TEMP
ENDSCAN
USE IN TEMP
THISFORM.OLECONTROL1.REFRESH
#7
mywisdom882022-05-09 12:32
thisform.olecontrol1.Nodes.clear
#8
王咸美2022-05-09 17:26
@mywisdom88 非常感谢你的指点!现在一层、两层节点代码已会写,三层节点代码不会写,能否帮忙写一下,先行谢谢。盼解答!
#9
mywisdom882022-05-09 17:59
树是子父节点关系的,
#10
my23182022-05-09 21:35
考虑效率,可以建3个树,根据不同要求使一个树可见,另两个数不看见。另外多层树可以先展开两层节点,需要详细情况时再展开下层节点。
#11
王咸美2022-05-10 07:43
下列代码红字部分出现问题(第三层节点:“性别” 不出现),请高手指教。万分感谢!!!
只有本站会员才能查看附件,请 登录

case Scfs=1
    thisform.olecontrol1.LINESTYLE=1
    THISform.olecontrol1.STYLE=7
    Thisform.OleControl1.Nodes.Clear
    SELECT distinct 年级  FROM cjhzb into CURSOR temp
    SCAN
        thisform.olecontrol1.Nodes.Add(,,'年级'+ALLTRIM(年级),年级)
        SELECT DISTINCT 班级 FROM cjhzb WHERE cjhzb.年级=TEMP.年级 INTO CURSOR TEMP1
        SELECT temp1
        SCAN
            thisform.OleControl1.Nodes.Add('年级'+ALLTRIM(temp.年级),4,'班级'+ALLTRIM(temp.年级)+ALLTRIM(班级),班级)
            SELECT distinct 性别 FROM cjhzb WHERE cjhzb.年级=Temp.年级 AND cjhzb.班级=Temp1.班级 INTO CURSOR temp2
            SELECT temp2

            SCAN
                thisform.olecontrol1.Nodes.Add('班级'+ALLTRIM(temp1.班级),4,'性别'+ALLTRIM(temp1.班级)+ALLTRIM(性别),性别)

            ENDSCAN
            USE IN temp2
            SELECT temp1
        ENDSCAN

        USE IN temp1
        SELECT temp
    ENDSCAN

    USE IN temp
    thisform.olecontrol1.refresh


[此贴子已经被作者于2022-5-10 07:44编辑过]

#12
mywisdom882022-05-10 09:12
树,是一种父子关系,从节点到支点的分布;就某间学校学生分类来说,
1.学校是这棵树的根,根长出3支树干,分别是,高中,初中,小学
XX学校——》(高中,初中,小学)
2.高中,初中,小学,是分支,然后分别分出,高中(高一,高二,高三);初中(初一,初二,初三);小学(一年级,二年级,三年级,四年级,五年级,六年级)
共12个分支
3.12个分支,是年级,然后,年级有分很多班级,这些都是从每个分支,再分出来的,是从根到支,再到叶,每个支点,只有1个上级节点,也就是每个儿子,只有1个老子,但一个老子,可以有多个小子,就是父子关系
树的表设计,就必须有这2个字段 ID,PID,同时,ID字段不能有重复的
ID:当前节点的序号
PID:当前节点的上级序号

#13
fyyylyl2022-05-11 09:22
大概是ID不唯一吧?试试        
THISFORM.OLECONTROL1.Nodes.Add('班级'+ALLTRIM(temp.年级)+ALLTRIM(temp1.班级),4,'性别'+ALLTRIM(temp.年级)+ALLTRIM(temp1.班级)+ALLTRIM(性别),性别)
#14
王咸美2022-05-11 09:34
@fyyylyl 如你所说,问题已完美解决,谢谢!
1