asp.net 2.0 中递归树的实现

本文介绍如何使用 ASP.NET 中的 TreeView 控件来构建动态的树形导航菜单。通过连接数据库并递归地填充节点,实现了从数据库中读取多级结构的数据并展示为树形结构的功能。

HTML页面:


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="TreeView.aspx.vb" Inherits="TreeView" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
    
<BASE target="main">
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:TreeView ID="TreeView1" runat="server" ExpandDepth="1" Font-Size="9pt" AutoGenerateDataBindings="False" EnableTheming="True" NodeWrap="True" ShowLines="True" Target="_blank">
        
</asp:TreeView>
    
    
</div>
    
</form>
</body>
</html>

 后台CS代码:


Imports System.Web
Imports System.Data.SqlClient
Imports System.Data

Partial Class TreeView
    
Inherits System.Web.UI.Page

    
Dim ds As DataSet = New System.Data.DataSet()


    
Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
        
If Not IsPostBack Then
            
Dim sqlstr As String = "select a.*,T32003.T3200303 as orderProgramID from(select 项目代码 as nodeID,项目名称 as nodeName,项目名称 as parentID from acf_v_lefttree_Admin where 项目代码<>' ' and 项目代码 is not null group by 项目代码,项目名称 union all select 系统代码 as nodeID,系统名称 as nodeName,项目代码 as parentID from acf_v_lefttree_Admin where 系统代码<>' ' and 系统代码 is not null group by 项目代码,系统代码,系统名称  union all select 子系统代码 as nodeID,子系统名称 as nodeName,系统代码 as parentID from acf_v_lefttree_Admin where 子系统代码<>' ' and 子系统代码 is not null group by 系统代码,子系统代码,子系统名称  union all select 程式代码 as nodeID,程式名称 as nodeName,子系统代码 as parentID from acf_v_lefttree_Admin where  程式代码<>' ' and 程式代码 is not null group by 子系统代码,程式代码,程式名称 ) a left outer join T32003 on a.nodeID = T32003.T3200301"
            
Dim conn As SqlConnection = New SqlConnection("server=(local);database=acfv3;uid=sa;pwd=888888")
            
Dim sqlada As SqlDataAdapter = New SqlDataAdapter(sqlstr, conn)
            sqlada.Fill(ds, 
"TreeTb")
            createtree(TreeView1.Nodes, 
"我的ACF")

        
End If
    
End Sub


    
Private Sub createtree(ByVal TreeVwNds As TreeNodeCollection, ByVal strCurrentID As String)
        
Dim datviw As New DataView
        
Dim datrow As DataRowView
        
Dim TreeVwNode As TreeNode
        
Dim currentId As String
        datviw.Table 
= ds.Tables("TreeTb")
        datviw.Sort 
= "orderProgramID"
        
Try
            datviw.RowFilter 
= " parentID ='" & strCurrentID & "'"
            
If datviw.Count > 0 Then
                
For Each datrow In datviw
                    TreeVwNode 
= New TreeNode
                    TreeVwNode.Value 
= datrow("nodeID")
                    currentId 
= datrow("nodeID")
                    TreeVwNds.Add(TreeVwNode)
                    TreeVwNode.Text 
= Trim(datrow("nodeName"))
                    TreeVwNode.Target 
= "_blank"
                    
Dim i As Integer = TreeVwNds.Count
                    createtree(TreeVwNds(TreeVwNds.Count 
- 1).ChildNodes, currentId)
                
Next
            
End If
        
Catch ex As Exception
            Response.Write(ex.ToString)

        
End Try

    
End Sub

End Class

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值