主要使用递归实现,数据库结构:
最终样式:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not Page.IsPostBack Then
BindDrpClass()
End If
End Sub
Private Sub BindDrpClass()
'绑定顶级分类
Dim classSystem As New Bll.Class()
Dim dt As DataTable = classSystem.GetClassList("").Tables(0)
ddlClass.Items.Clear()
ddlClass.Items.Add(New ListItem("添加根栏目", "0"))
Dim drs As DataRow() = dt.[Select]("ParentID= " + 0)
For Each dr As DataRow In drs
Dim classid As String = dr("ClassID").ToString()
Dim classname As String = dr("ClassName").ToString()
'顶级分类显示形式
classname = "╋" + classname
ddlClass.Items.Add(New ListItem(classname, classid))
Dim sonparentid As Integer = Integer.Parse(classid)
Dim blank As String = "├"
'递归子分类方法
BindNode(sonparentid, dt, blank)
Next
ddlClass.DataBind()
End Sub
'绑定子分类
Private Sub BindNode(ByVal parentid As Integer, ByVal dt As DataTable, ByVal blank As String)
Dim drs As DataRow() = dt.[Select]("ParentID= " + parentid)
For Each dr As DataRow In drs
Dim classid As String = dr("ClassID").ToString()
Dim classname As String = dr("ClassName").ToString()
classname = blank + classname
ddlClass.Items.Add(New ListItem(classname, classid))
Dim sonparentid As Integer = Integer.Parse(classid)
Dim blank2 As String = blank + "─"
BindNode(sonparentid, dt, blank2)
Next
End Sub
Public Function GetClassList(ByVal strWhere As String) As DataSet
Dim strSql As New StringBuilder()
strSql.Append("select * from tb_Class ")
If strWhere.Trim() <> "" Then
strSql.Append(" where " + strWhere)
End If
Return SqlHelper.ExecuteDataset(SqlHelper.ConnString, CommandType.Text, strSql.ToString())
End Function

