干吗用嵌套表呀,我这里有一个我做的五级树,希望对你有所帮助这是我的一个工程中的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
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
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
'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
http://expert.csdn.net/Expert/topic/1308/1308130.xml?temp=.3259546