关于TREEVIEW 的问题

yunfengh 2005-09-24 04:51:15
名位小弟现有一个这样的数据表:
LSNUM(流水号), FID (一级ID), FNAME(一级名称),SID(二级ID) ,SNAME (二级名称),
TID(三级ID),TANME(三级名称)
附建表语句
CREATE TABLE [TBZCXX] ( [LSNUM] [int] NULL , [FID] [char] (2) NULL , [FNAME] [char] (20) NULL , [SID] [char] (5) NULL , [SNAME] [char] (20) NULL , [TID] [char] (10) NULL , [TNAME] [char] (20) NULL , [BEIZHU] [varchar] (50) NULL )

INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] ) VALUES ( 1 , '01' , '生活费 ' , '01001' , '早餐 ' , '01001001 ' , '干饭 ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] ) VALUES ( 2 , '01' , '生活费 ' , '01001' , '早餐 ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] ) VALUES ( 3 , '01' , '生活费 ' , '01002' , '中餐 ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] ) VALUES ( 4 , '01' , '生活费 ' , '01003' , '晚餐 ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] ) VALUES ( 5 , '01' , '生活费 ' , '01001' , '早餐 ' , '01001002 ' , '豆浆 ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] ) VALUES ( 6 , '02' , '通讯费用 ' , '02001' , '手机 ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] ) VALUES ( 7 , '02' , '通讯费用 ' , '02002' , '小灵通 ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] , [BEIZHU] ) VALUES ( 8 , '02' , '通讯费用 ' , '02002' , '手机 ' , '02002001 ' , '充值卡 ' , ' ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] , [BEIZHU] ) VALUES ( 10 , '01' , '生活费 ' , '01003' , '早餐 ' , '01003001 ' , 'dsdfsdf ' , ' ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] , [BEIZHU] ) VALUES ( 12 , '01' , '生活费 ' , '01003' , '早餐 ' , '01003002 ' , 'ret ' , ' ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] , [BEIZHU] ) VALUES ( 14 , '01' , '生活费 ' , '01003' , '早餐 ' , '01003003 ' , 'sdfsd ' , ' ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] , [BEIZHU] ) VALUES ( 15 , '01' , '生活费 ' , '01003' , '早餐 ' , '01003004 ' , 'sdfsdf ' , ' ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] , [BEIZHU] ) VALUES ( 16 , '01' , '生活费 ' , '01001' , '早餐 ' , '01001003 ' , 'sdfsdf ' , ' ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] ) VALUES ( 17 , '02' , '通讯费用 ' , '02003' , '充值卡 ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] , [BEIZHU] ) VALUES ( 17 , '02' , '通讯费用 ' , '02003' , '手机 ' , '02003001 ' , '小灵通值卡 ' , ' ' )
INSERT [TBZCXX] ( [LSNUM] , [FID] , [FNAME] , [SID] , [SNAME] , [TID] , [TNAME] , [BEIZHU] ) VALUES ( 18 , '02' , '通讯费用 ' , '02003' , '手机 ' , '02003002 ' , '手机充值卡 ' , ' ' )



现在我需要在TREEVIEW中分级显示出来:

能否给个代码:

高分相赠

...全文
174 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunfengh 2005-10-07
  • 打赏
  • 举报
回复
谢谢各位.....

fishmans 2005-10-05
  • 打赏
  • 举报
回复
有鬼了
我用你的SQL语句生成的表,查出来没错
yunfengh 2005-10-01
  • 打赏
  • 举报
回复
还是不行.
fishmans 2005-09-28
  • 打赏
  • 举报
回复
rst.open "select * from TBZCXX order by fid ,sid ,tid",cnn
if rst.eof =false and rst.bof =false then
do while not rst.eof
if rst(tid)&""="" then'无第三层
Set nodX = TreeView1.Nodes.Add(,, "Z" & rst("fid"),rst("fname"))'添加第一层
Set nodX = TreeView1.Nodes.Add("Z" & rst("fid"),tvwchild, "Z" & rst("sid"),rst("sname"))'添加第二层
else
Set nodX = TreeView1.Nodes.Add("Z" & rst("sid"),tvwchild, "Z" & rst("tid"),rst("Tname"))'添加第三层
end if
rst.movenext
loop
end if
fishmans 2005-09-28
  • 打赏
  • 举报
回复
粗略看了一下结构
首先第一点,结构不够好
可以只要lssum,fid,fname,baizhu四个字段就可以达到你的要求
fid的格式设为:01
01001
01002
01002001
..........
这样只要用order 排一下序再判断长度就可以知道层数了,而且很方便

如果结构固定了那么查询如下
select * from TBZCXX order by fid ,sid ,tid
得出结果后循环添加节点,遇到没有第三层的记录可以连续添加第一层和第二层


bbhere 2005-09-28
  • 打赏
  • 举报
回复
fj182 2005-09-28
  • 打赏
  • 举报
回复
你的表设计好奇怪,难道不想用简单一点的办法吗?用两张表多简单

Group(ID,ParentGroup,GroupName)
Item(ID,ParentGroup,ItemName)

分N层都没问题。
yunfengh 2005-09-27
  • 打赏
  • 举报
回复
各位,小弟想要的是数据表结构 fid,fname,sid,sname,tid,tname

不是以上的数据表结构:
我主要是要显示三层的数据,下面是显示二层的数据...



'树状显示
txtSQL = "select distinct fid,fname,sid,sname,tid,tname from tbzcxx order by fname"

Set dbrc = ExSQL(txtSQL, msgtext)

Set nodX = TreeView1.Nodes.Add(, , "r", "支出项目")

i = 0

Do Until dbrc.EOF Or dbrc.BOF
If TempString = dbrc!FNAME Then
Set nodeX = TreeView1.Nodes.Add("Z" & TempKey, tvwChild, "B" & i, Trim(dbrc!SID) & "_" & Trim(dbrc!SNAME))
Else
Set nodX = TreeView1.Nodes.Add("r", tvwChild, "Z" & i, Format(Trim(dbrc!FID), "00") & "_" & Trim(dbrc!FNAME))
Set nodeX = TreeView1.Nodes.Add("Z" & i, tvwChild, "B" & i, Trim(dbrc!SID) & "_" & Trim(dbrc!SNAME))

TempString = dbrc!FNAME
TempKey = i
End If
dbrc.MoveNext
i = i + 1
Loop

For Each nodeY In TreeView1.Nodes
If CStr(Trim(nodeY.Text)) = "ff" Then
nodeY.Selected = True
TreeView1.SetFocus
Exit For
End If
Next

For j = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(j).Expanded = False '展开所有节点
Next j


谁能帮我修改一下....
fj182 2005-09-27
  • 打赏
  • 举报
回复
我给你个遍历任意层的代码

例子表(ID,ParentID,Caption)

'添加所有分组
'参数:TreeView控件
Public Sub AddNode(ByRef tvw As TreeView)
tvw.Nodes.Clear
tvw.Nodes.Add , , "_0", "全部分组" 'Node的Key属性不允许为数字,所以加了个下划线。下同
Call AddNode(tvw,0)
End Sub

'给Tvw添加节点
'参数:treeview控件,上一级编号
Public Sub AddNode(ByRef tvw As TreeView, ByVal lngParentID As Long)
Dim strSQL As String
Dim rsTemp As Recordset
Dim nodX As Node

strSQL = "select * from TableName where "

If lngParentID Then
strSQL = strSQL & "ParentID=" & CStr(lngParentID)
Else
strSQL = strSQL & "ParentID is null"
End If

Set rsTemp = Cnn.Execute(strSQL) 'Cnn为到数据库的连接

Do Until rsTemp.EOF
Set nodX = tvw.Nodes.Add("_" & CStr(lngParentID), tvwChild, _
"_" & CStr(rsTemp("ID")), rsTemp("Caption"))
Call AddNode(tvw, rsTemp("ID")) '递归
rsTemp.MoveNext
Loop

rsTemp.Close
Set rsTemp = Nothing
End Sub
yunfengh 2005-09-26
  • 打赏
  • 举报
回复
我要三层遍历的例子

谁给我我想要的代码.我把全部分给他
bbhere 2005-09-24
  • 打赏
  • 举报
回复
网上treeview的例子不少,你可以找找,一看就懂了
SFMrp2000 2005-09-24
  • 打赏
  • 举报
回复
慢慢看:代碼很原始,但夠你用.

'//節點增加圖像大類資料=========================================
If OpenDBase(Pic_LSort_QS1("LSort_Name", "LSort_CS3=1")) = False Then
GoTo ErrExit
End If
'//清除所有節點=================================================
TreeView1.Nodes.Clear
'//無記錄=======================================================
If x_Rs.RecordCount = 0 Then
'//先增加一個列表頭=============================================
Set Nodesx = TreeView1.Nodes.Add(, , "First", "全部圖像大類資料", 1, 2)
GoTo ErrExit
End If
'//先增加一個列表頭=============================================
Set Nodesx = TreeView1.Nodes.Add(, , "First", "全部圖像大類資料", 1, 2)
Nodesx.Expanded = True
'//有圖像大類資料時
x_Rs.MoveFirst
Do While Not x_Rs.EOF
'//加入父類=================================================
Set Nodesx = TreeView1.Nodes.Add("First", tvwChild, x_Rs.Fields("LSort_ID").Value & "(" + CStr(x_Rs.Fields("LSort_CS3").Value) + ")", x_Rs.Fields("LSort_Name").Value, 1, 2)
If Nodesx.Key = TreeviewSelectKey Then
Nodesx.Selected = True
End If

CsID = x_Rs.Fields("LSort_ID").Value
CsStr = x_Rs.Fields("LSort_ID").Value & "(" + CStr(x_Rs.Fields("LSort_CS3").Value) + ")"

'//加入子類=================================================
If x_Rs_1.State = 1 Then x_Rs_1.Close
x_Rs_1.Open "Select * from Pic_LSort Where LSort_Cs2=" & CsID & " Order By LSort_Name", D1.DataConnect, adOpenKeyset, adLockBatchOptimistic
If x_Rs_1.RecordCount <> 0 Then
'//這是增加子類資料
x_Rs_1.MoveFirst
'//有圖像大類資料時
Do While Not x_Rs_1.EOF
Set Nodesx = TreeView1.Nodes.Add(CsStr, tvwChild, x_Rs_1.Fields(0).Value & "(" + CStr(x_Rs_1.Fields("LSort_CS3").Value) + ")", x_Rs_1.Fields(1).Value, 3, 2)
If Nodesx.Key = TreeviewSelectKey Then
Nodesx.Selected = True
End If
'//第三層===========================================
CsID1 = x_Rs_1.Fields("LSort_ID").Value
CsStr1 = x_Rs_1.Fields("LSort_ID").Value & "(" + CStr(x_Rs_1.Fields("LSort_CS3").Value) + ")"
If x_Rs_2.State = 1 Then x_Rs_2.Close
x_Rs_2.Open "Select * from Pic_LSort Where LSort_Cs2=" & CsID1 & " Order By LSort_Name", D1.DataConnect, adOpenKeyset, adLockBatchOptimistic
If x_Rs_2.RecordCount <> 0 Then
'//這是增加子類資料
x_Rs_2.MoveFirst
'//有圖像大類資料時
Do While Not x_Rs_2.EOF
Set Nodesx = TreeView1.Nodes.Add(CsStr1, tvwChild, x_Rs_2.Fields(0).Value & "(" + CStr(x_Rs_2.Fields("LSort_CS3").Value) + ")", x_Rs_2.Fields(1).Value, 3, 2)
If Nodesx.Key = TreeviewSelectKey Then
Nodesx.Selected = True
End If
x_Rs_2.MoveNext
Loop
End If
'//第三層===========================================
x_Rs_1.MoveNext
Loop
End If
x_Rs.MoveNext
Loop
chtlover 2005-09-24
  • 打赏
  • 举报
回复
楼主TREEVIEW控件会用吧,如果不会先看看MSDN上的内容,如果会的话,就是打开数据集,遍历所数据把结点一层层加进去,

不过楼主如果用树状控件你这个表结构好像不太合适,表当中最好有父结点ID,结点层次;这样的话你写起代码来就比较容易了
yunfengh 2005-09-24
  • 打赏
  • 举报
回复
我要这种效果:

生活费
-中餐
-ksld fl
-早餐
-sdfsd

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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