有必要用嵌套表吗,树的级数问题应该用递归的方式可以解决啊 !
id  nodename   parentid

解决方案 »

  1.   

    干吗用嵌套表呀,我这里有一个我做的五级树,希望对你有所帮助这是我的一个工程中的treeview,虽然最后并没有选这个方案而是用了更灵活的树,但应对你有所帮助楼主将各列的值换位一个列中不同位置的数值数据即可!
      leiflag = False
            sheng = ""
            shi = ""
            lei = ""
            te = ""
            Try            Dim mynodes As TreeNodeCollection
                Dim i As Integer = 0, j As Integer = 0, k As Integer = 0, l As Integer = 0, m As Integer = 0            strsql = "SELECT 单位所在省, 单位所在市, 单位类别,特点一,特点二 FROM pc_company ORDER BY 单位所在省, 单位所在市,单位类别,特点一 "
                sqlcom = New SqlCommand(strsql, conn)
                conn.Open()
                dr = sqlcom.ExecuteReader
                While dr.Read                If dr.GetString(0) <> sheng Then
                        j = 0
                        k = 0
                        l = 0
                        m = 0                    sheng = dr.GetString(0)
                        shi = dr.GetString(1)
                        lei = dr.GetString(2)
                        te = dr.GetString(3)                    With TreeView1
                            .Nodes.Add(dr.GetString(0))
                            .SelectedNode = .Nodes(i)
                            i = i + 1                        .SelectedNode.Nodes.Add(dr.GetString(1))
                            .SelectedNode = .SelectedNode.Nodes(j)
                            j = j + 1                        .SelectedNode.Nodes.Add(dr.GetString(2))
                            .SelectedNode = .SelectedNode.Nodes(k)
                            k = k + 1                        .SelectedNode.Nodes.Add(dr.GetString(3))
                            .SelectedNode = .SelectedNode.Nodes(l)
                            l = l + 1                        .SelectedNode.Nodes.Add(dr.GetString(4))
                            .SelectedNode = .SelectedNode.Nodes(m)
                            m = m + 1
                        End With                Else
                        If dr.GetString(1) <> shi Then
                            shi = dr.GetString(1)
                            lei = dr.GetString(2)
                            te = dr.GetString(3)
                            k = 0
                            l = 0
                            m = 0
                            With TreeView1
                                .SelectedNode.Parent.Parent.Parent.Parent.Nodes.Add(dr.GetString(1))
                                .SelectedNode = .SelectedNode.Parent.Parent.Parent.Parent.Nodes(j)
                                j = j + 1                            .SelectedNode.Nodes.Add(dr.GetString(2))
                                .SelectedNode = .SelectedNode.Nodes(k)
                                k = k + 1                            .SelectedNode.Nodes.Add(dr.GetString(3))
                                .SelectedNode = .SelectedNode.Nodes(l)
                                l = l + 1                            .SelectedNode.Nodes.Add(dr.GetString(4))
                                .SelectedNode = .SelectedNode.Nodes(m)
                                m = m + 1
                            End With
                        Else
                            If dr.GetString(2) <> lei Then
                                lei = dr.GetString(2)
                                te = dr.GetString(3)
                                l = 0
                                m = 0                            With TreeView1
                                    .SelectedNode.Parent.Parent.Parent.Nodes.Add(dr.GetString(2))
                                    .SelectedNode = .SelectedNode.Parent.Parent.Parent.Nodes(k)
                                    k = k + 1                                .SelectedNode.Nodes.Add(dr.GetString(3))
                                    .SelectedNode = .SelectedNode.Nodes(l)
                                    l = l + 1                                .SelectedNode.Nodes.Add(dr.GetString(4))
                                    .SelectedNode = .SelectedNode.Nodes(m)
                                    m = m + 1
                                End With
                            Else
                                If dr.GetString(3) <> te Then
                                    te = dr.GetString(3)
                                    m = 0
                                    With TreeView1                                    .SelectedNode.Parent.Parent.Nodes.Add(dr.GetString(3))
                                        .SelectedNode = .SelectedNode.Parent.Parent.Nodes(l)
                                        l = l + 1                                    .SelectedNode.Nodes.Add(dr.GetString(4))
                                        .SelectedNode = .SelectedNode.Nodes(m)
                                        m = m + 1
                                    End With
                                Else
                                    With TreeView1
                                        .SelectedNode.Parent.Nodes.Add(dr.GetString(4))
                                        .SelectedNode = .SelectedNode.Parent.Nodes(m)
                                        m = m + 1
                                    End With
                                End If                        End If
                        End If
                    End If
                End While
                conn.Close()
                TreeView1.CollapseAll()
                '''CallRecursive(TreeView1)
            Catch err As Exception
                MsgBox(err.ToString)
            End Try
      

  2.   

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Put user code to initialize the page here
    if not ispostback then
          sqlpara1 = New SqlParameter("@parentdocid", Session("parentdocid"))
            coll = New Collection()
            coll.Add(sqlpara1)
            ds = New DataSet()
            ds = OA.RunStoreProcReturn("Email_BoundUserDOC", coll)
            Session("ds") = ds
             BoundTreeview(TreeView1.Nodes, 0)
    end if
        End Sub Private Sub BoundTreeview(ByRef TreeNodes As TreeNodeCollection, ByVal ParentID As Integer)
            'DocName,DocumentID,ParentDocID
            Dim ds As New DataSet()
            ds = Session("ds")
            Dim treeDV As New DataView()
            Dim treeDVrow As DataRowView
            Dim treeId As Integer
            Dim treeTemp As TreeNode
            Dim treeName As String
            treeDV.Table = ds.Tables(0)
            treeDV.RowFilter = "parentdocid='" & ParentID & "'"
            For Each treeDVrow In treeDV
                treeTemp = New TreeNode()
                treeName = treeDVrow("DocName")
                treeId = treeDVrow("DocumentID")
                treeTemp.ID = treeId
                treeTemp.Text = treeName
                TreeNodes.Add(treeTemp)
                BoundTreeview(TreeNodes(TreeNodes.Count - 1).Nodes, treeId)
            Next
        End Sub
      

  3.   

    可以看看这个,我写的代码:
    http://expert.csdn.net/Expert/topic/1308/1308130.xml?temp=.3259546