名位小弟现有一个这样的数据表:
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中分级显示出来:能否给个代码:高分相赠

解决方案 »

  1.   

    我要这种效果:生活费
        -中餐
             -ksld fl
         -早餐
             -sdfsd
      

  2.   

    楼主TREEVIEW控件会用吧,如果不会先看看MSDN上的内容,如果会的话,就是打开数据集,遍历所数据把结点一层层加进去,不过楼主如果用树状控件你这个表结构好像不太合适,表当中最好有父结点ID,结点层次;这样的话你写起代码来就比较容易了
      

  3.   

    慢慢看:代碼很原始,但夠你用.'//節點增加圖像大類資料=========================================
        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
      

  4.   

    网上treeview的例子不少,你可以找找,一看就懂了
      

  5.   

    我给你个遍历任意层的代码例子表(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
      

  6.   

    各位,小弟想要的是数据表结构 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
    NextFor j = 1 To TreeView1.Nodes.Count
        TreeView1.Nodes(j).Expanded = False '展开所有节点
      Next j
    谁能帮我修改一下....
      

  7.   

    你的表设计好奇怪,难道不想用简单一点的办法吗?用两张表多简单Group(ID,ParentGroup,GroupName)
    Item(ID,ParentGroup,ItemName)分N层都没问题。
      

  8.   

    粗略看了一下结构
    首先第一点,结构不够好
    可以只要lssum,fid,fname,baizhu四个字段就可以达到你的要求
    fid的格式设为:01
                     01001
                     01002
                       01002001
                       ..........    
    这样只要用order 排一下序再判断长度就可以知道层数了,而且很方便如果结构固定了那么查询如下
    select * from TBZCXX order by fid ,sid ,tid 
    得出结果后循环添加节点,遇到没有第三层的记录可以连续添加第一层和第二层
      

  9.   

    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
      

  10.   

    有鬼了
    我用你的SQL语句生成的表,查出来没错