主题:TreeView问题
笨兔
[专家分:300] 发布于 2009-09-08 21:02:00
我有三个表:tbls,tblj,tblh
tbls(sbh,smc),tblj(sbh,jbh,jmc),tblh(sbh,jbh,hbh,hmc)*括号内是每个表的字段。
我在表单控件的init中写代码:
this.lineStyle= 1
this.style = 7 && tvwTreelinesPlusMinusPictureTex
this.ImageList =thisform.iMAGELIST1
SELECT tbls
SCAN
this.Nodes.Add(,,tbls.sbh,tbls.smc,1,2)
SELECT tbls
SELECT * FROM tblj WHERE ALLTRIM(tbls.sbh)=ALLTRIM(tblj.sbh) INTO CURSOR emp01
SELECT emp01
SCAN
this.Nodes.Add(sbh,4,jbh,jmc,2,2)
ENDSCAN
SELECT tblj
SELECT * FROM tblh WHERE ALLTRIM(tblj.jbh)=ALLTRIM(tblh.jbh ) INTO CURSOR emp02
SELECT emp02
SCAN
** this.Nodes.Add(jbh,4,hbh,hmc,3,2)&&这句有问题
ENDSCAN
ENDSCAN
我的目的是建立一个三层的内容。
请指导
谢谢了
回复列表 (共13个回复)
沙发
Vii [专家分:1130] 发布于 2009-09-08 21:51:00
你是否可以将三个表先合并为一个表?
目录树的建立,只要指定本级结点和父结点就可以.
合并后按顺序追加就可以了.
理论上这样的已经可以建立好多级了.
Hpbh Hpparent Hptitle
2 0 2.0.0-基础资料
3 1 1.1.0-重要设置
4 3 1.1.1-账套选项
5 3 1.1.2-单据参数
6 3 1.1.3-权限设置
7 3 1.1.4-自定义查询设计
8 3 1.1.5-基础资料导入
9 3 1.1.6-数据导入/导出
以下数据全属于猜测:
sbh smc
----------- -------------
1 AAA
2 BBB
3 CCC
4 DDD
(所影响的行数为 4 行)
sbh jbh jmc
----------- ----------- --------
1 1 EEE
1 2 FFF
2 3 GGG
3 4 HHH
(所影响的行数为 4 行)
sbh jbh hbh hmc
----------- ----------- ----------- --------
1 1 1 III
1 1 2 JJJ
1 2 3 KKK
2 3 4 LLL
(所影响的行数为 4 行)
======================华丽的分割===========================
[color=FF0000]PARENT BH CAPTION
----------- ----------- ---------
0 1 AAA
0 2 BBB
0 3 CCC
0 4 DDD
1 2 EEE
1 3 FFF
2 3 III
2 4 JJJ
2 5 GGG
3 6 KKK
3 7 HHH
5 9 LLL
(所影响的行数为 12 行)[/color]
板凳
笨兔 [专家分:300] 发布于 2009-09-08 21:58:00
表就是这样的。
3 楼
Vii [专家分:1130] 发布于 2009-09-08 22:00:00
忘记贴语句了,仅供参考:
SELECT * FROM TBLS
SELECT * FROM TBLJ
SELECT * FROM TBLH
--合并三张表:
SELECT * FROM (
SELECT 0 AS PARENT,SBH AS BH,SMC AS CAPTION FROM TBLS
UNION ALL
SELECT SBH AS PARENT,SBH+JBH AS BH,JMC AS CAPTION FROM TBLJ
UNION ALL
SELECT SBH+JBH AS PARENT,SBH+JBH+HBH AS BH,HMC AS CAPTION FROM TBLH
)A ORDER BY PARENT,BH
4 楼
笨兔 [专家分:300] 发布于 2009-09-09 07:01:00
谢谢Vii
问题没有解决,谁能说的详细一些吗!
sbh smc
----------- -------------
S1 AAA
S2 BBB
S3 CCC
S4 DDD
(所影响的行数为 4 行)
sbh jbh jmc
----------- ----------- --------
S1 J1 EEE
S1 J2 FFF
S2 J3 GGG
S3 J4 HHH
(所影响的行数为 4 行)
sbh jbh hbh hmc pd
---- ----- ---- ---- ----
S1 J1 H1 III .T.
S1 J1 H2 JJJ .F.
S1 J2 H3 KKK .T.
S2 J3 H4 LLL .T.
(所影响的行数为 4 行)
tblh中pd是为了插入不同图标用的。
5 楼
Vii [专家分:1130] 发布于 2009-09-09 10:14:00
SELECT * FROM (
SELECT '1' AS XH,'P0' AS PARENT,SBH AS BH,SMC AS CAPTION FROM TBLS
UNION ALL
SELECT '2' AS XH,SBH AS PARENT,JBH AS BH,JMC AS CAPTION FROM TBLJ
UNION ALL
SELECT '3' AS XH,JBH AS PARENT,HBH AS BH,HMC AS CAPTION FROM TBLH
)A ORDER BY XH,PARENT,BH
增加序号列排序,以免按顺序追加结点时出现错误.
我的意见还是三张表能否设计的时候就在一张上?现在这样关联上麻烦,万一来个有子结点,没父结点的就麻烦.
--处理了一下,过滤没有父结点的,参考.
SELECT * FROM (
SELECT '1' AS XH,'P0' AS PARENT,SBH AS BH,SMC AS CAPTION FROM TBLS
UNION ALL
SELECT '2' AS XH,M1.SBH AS PARENT,M1.JBH AS BH,M1.JMC AS CAPTION FROM TBLJ M1 WHERE EXISTS (SELECT 1 FROM TBLS M2 WHERE M1.SBH=M2.SBH)
UNION ALL
SELECT '3' AS XH,M3.JBH AS PARENT,M3.HBH AS BH,M3.HMC AS CAPTION FROM TBLH M3
WHERE EXISTS (SELECT 1 FROM (SELECT M1.SBH,M1.JBH,M1.JMC AS CAPTION FROM TBLJ M1 WHERE EXISTS (SELECT 1 FROM TBLS M2 WHERE M1.SBH=M2.SBH)) M4 WHERE M3.SBH=M4.SBH AND M3.JBH=M4.JBH)
)A ORDER BY XH,PARENT,BH
6 楼
笨兔 [专家分:300] 发布于 2009-09-09 11:39:00
我有三个表,一个是室,室内有十个架,每个架有20个号,一共3个室。怎样设计一张表,实现这个功能。
号1
架1 <
室 < 号2 ……
架2
7 楼
yjr3032570 [专家分:3360] 发布于 2009-09-09 12:52:00
再笨的兔也有三个窝,三个表,三个室,这就是习惯!
[color=FF0000]** this.Nodes.Add(jbh,4,hbh,hmc,3,2)&&这句有问题[/color]
其实这句是没问题的,除非你图标3没有添加,我想不会吧!
根据你所说的到了最后一句出问题,哪么一定是EMP02这个表出了问题,要么这个表根本就没有数据,要么这个表生存了一个错误的数据,只要在程序出错的上一句加brow查看一下就知道了!
8 楼
笨兔 [专家分:300] 发布于 2009-09-09 13:46:00
有问题,但忽略能打到想要的效果,但是插入不准确,请多多指教
下面是截图的连接地址
http://static14.photo.sina.com.cn/small/5e8d2423h731e5bf2dc6d&690
9 楼
yjr3032570 [专家分:3360] 发布于 2009-09-09 14:31:00
SELECT tbls
SCAN
this.Nodes.Add(,,tbls.sbh,tbls.smc,1,2) &&添加父结点
ENDSCAN
SELECT tbls
SELECT * FROM tblj WHERE ALLTRIM(tbls.sbh)=ALLTRIM(tblj.sbh) INTO dbf emp01
SELECT emp01
SCAN
this.Nodes.Add(sbh,4,jbh,jmc,2,2) &&添加子结点
ENDSCAN
SELECT a.jbh,b.hbh,b.hmc FROM tblj a,tblh b WHERE ALLTRIM(a.jbh)=ALLTRIM(b.jbh ) AND !empty(b.hbh) INTO dbf emp02
SELECT emp02
SCAN
this.Nodes.Add(jbh,4,hbh,hmc,3,2) &&添加下节子结点
ENDSCAN
10 楼
笨兔 [专家分:300] 发布于 2009-09-09 15:02:00
非常感谢,在你的指导下,问题已经得到解决。
我来回复