做的时候在网站找了N个小时的代码也没找见比较短小的代码,索性自已写了一个,功能是可以无限级分类填充TreeView.
'//调用时使用LoadTree(TreeView1.Nodes,0) 参数1表示当前的节目级别.0表示为根节点,参数2为父分类ID,0表示顶级分类,
'//以下是代码,VB.NET 2.0,2.0和1.1基本上是一致的,在语法上没多大的区别.
'//从数据库中读取分类信息加载分类到列表框中.
Private Sub loadTree(ByVal Nodes As TreeNodeCollection, ByVal lbID As Integer)
'获得各级分类
Dim sNode As Integer = -1
Dim CmdText As String = "Select * From sys_lb where FolderID=" + lbID.ToString + " Order by ID"
Dim Ds As DataSet = New DataSet
Dim Dr As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(CmdText, SqlConn)
Dr.Fill(Ds)
If Ds.Tables(0).Rows.Count > 0 Then
'加载节点
Dim I As Integer
For I = 0 To Ds.Tables(0).Rows.Count - 1
sNode += 1
Dim mylbName As String = Ds.Tables(0).Rows(I).Item("lbName").ToString
Dim mylbID As String = Ds.Tables(0).Rows(I).Item("ID").ToString
Nodes.Add(mylbID, mylbName)
'读取当前节点的子节点加载
loadTree(Nodes(sNode).Nodes, CInt(mylbID))
Next
End If
TreeView1.ExpandAll()
End Sub
'//Sys_lb表的结构:
CREATE TABLE [dbo].[sys_lb] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[lbName] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[lbInfo] [varchar] (120) COLLATE Chinese_PRC_CI_AS NULL ,
[folderID] [int] NOT NULL
) ON [PRIMARY]
GO
'//ID为自动编号Int类型,LbName为分类名称,LbInfo为分类说明,该列您可以修改或是删除它.FolderID存储父级分类ID