请教一个关于TreeView加载的问题(UP者,回复都有分)

wingedsteed 2005-12-13 03:34:49
我现在有两个如下的表:
表一: 表二:
ID 地区编码 地区名 ID 供应商名 …… 所属地区编号 所属地区名
1 1001 中国 1 abcd 1001001 广东省
2 1001001 广东省 2 EEEE 1001001 广东省
3 1001001001 广州 3 ccc 1001001001 广州
……市 ……
23 1001002 湖南 4 fff 1001002 湖南
………… ……

我想全部加载到TreeView中去,加载后的效果如下:

|--中国(1001)
|----广东省(1001001)
|-------abcd (在这里把表二相对应的供应商加到列表中去)
|-------EEEE
|-------广州(10010002)
|----------ccc (在这里把表二里属于广广州这个地区的供应加到广州下面。)
|……
|-----湖南(1001002)
|--------fff
|………………

加载完成后,点击树上的节点,如果是供应商的话,则在左名的几个文本框中显示该供应商的其他信息,如果不是,则什么都不显示。

请问各位高手应该怎么写这段代码??

UP者有分,如果分不够,我可以开贴再加分。
...全文
173 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
clear_zero 2005-12-13
  • 打赏
  • 举报
回复
1.区别两层节点。方法很多种,上面都说了很多。
2.点击到供应商节点。可以用tag储存id值。这样只要根据当前节点的tag值。就可以在数据库中查到相应的数据,显示在textbox里面了
zfl2k 2005-12-13
  • 打赏
  • 举报
回复
很简单:
第一步、加载地区到tree,可在key中加上dq 用以识别是地区
rec.open "select * from 表一 order by 编码"
with rec
do while not trec.eof
if len(trec!编码)=4 then
'添加tree的父目录 key设为 "dq" & 编码
else
'添加tree的子目录 父key为 "dq" & 编码去掉后三位 ,key为 "dq" & 编码
end if
rec.movenext
loop
end with
第二步、加载供应商到tree
rec.open "select * from 表二"
with rec
do while not trec.eof
'添加tree的子目录 父key为 "dq" & 所属地区编号 ,key为 供应商名或供应商编码
rec.movenext
loop
end with
点击tree时,如果key前两位为dq 则为地区,否则就是供应商
weiweiplay 2005-12-13
  • 打赏
  • 举报
回复
在填写树的时候,分别对每一个类型用不同的KEY值区分:
国家 : KEY1
省/地区:KEY2
城市:KEY3
供应商:KEY4

这几个固定KEY值加上不同的编号组合成每一个NODE的KEY值,处理选择事件时先判断是否为供应商类别就可以了



winehero 2005-12-13
  • 打赏
  • 举报
回复
当然你还可以在填充节点时,根据是否为供应商,对Node的Tag设相应值。比如说,供应商节点
的Tag为G,省设为S,市设为C, 那么代码就可为:
Private Sub TreeView1_NodeClick(ByVal Node As Node)
If Node.tag = "G" Then
MsgBox Node.Text
elseif Node.tag="S" then
msgbox "省: " & Node.text
elseif Node.tag="C" then
msgbox "市: " & Node.text
......
End If
End Sub

具体采用Children还是Tag看你需要了,如果你需要对省级等不同级作不同相应,建议用TAG
weiweiplay 2005-12-13
  • 打赏
  • 举报
回复
建立两个类

clsArea '地区类

public ID as long '序号
public AreaID as long '地区编号
public AreaName as string '地区名称
public TreeIndex as long '地区所出目录树的层数

clsSupport '供应商类

public ID as long '序号
public SuppName as string '供应商名称
public AreaID as long '地区编号
public AreaName as string '地区名称


建立两个集合

public AreaCol as new Collection
public SuppCol as new Collection


分别将两个表的数据读入这两个集合中,这里要主要的事地区表读取是要判断所在层,为写树做准备

dim Area as clsArea
dim Supp as clsSupport

rs.open "Select * From Area Order By ID"

Do While Not rs.Eof
set Area = new clsArea
with Area
.ID = rs.fields("ID")
.AreaID = rs.fields("地区编码")
.AreaName = rs.fields("地区名称")
if .AreaID \ 10000 = 0 then .AreaIndex = 1
if .AreaID \ 100000000 = 0 then .AreaIndex = 2
if .AreaID \ 10000000000 = 0 then .AreaIndex = 3
end with
AreaCol.Add Area
rs.MoveNext
Loop

供应商集合同样的方法读取

写树的时候循环集合,找到第一层的条目写第一层,写完后判断其他条目是否是此层的下层,一个一个写完地区,然后从供应商集合中分别找出对应的层,添加就可以
winehero 2005-12-13
  • 打赏
  • 举报
回复
填充TreeView可参考:
http://community.csdn.net/Expert/topic/4452/4452807.xml?temp=.919491

至于选中供应商的,显示名称的问题,如楼上判断当前节点的Children是否为0,类似于:

Private Sub TreeView1_NodeClick(ByVal Node As Node)
If Node.Children = 0 Then
MsgBox Node.Text
End If
End Sub


xiaoMONKEY 2005-12-13
  • 打赏
  • 举报
回复
给你一个思路:当点击树目录时,判断:如果节点有子节点不显示,如果没有子节点根据你自己的条件判断是还显示。
oho1937 2005-12-13
  • 打赏
  • 举报
回复
几种方法
1。添加时在KEY时区分,比如在KEY的前后加标记
2。添加时以不同ICON区分,点击时判断ICON
3。点击时到数据库验证(不推荐)
wingedsteed 2005-12-13
  • 打赏
  • 举报
回复
刚学,做第一个就遇到了问题,所以上来请教。
bbhere 2005-12-13
  • 打赏
  • 举报
回复
up
mustudent 2005-12-13
  • 打赏
  • 举报
回复
看样子你再作财务的软件啊

1,453

社区成员

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

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