惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
B
Blog
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Jina AI
Jina AI
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
L
LangChain Blog
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
酷 壳 – CoolShell
酷 壳 – CoolShell
Y
Y Combinator Blog
F
Fortinet All Blogs
H
Help Net Security
B
Blog RSS Feed
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题

博客园 - xiaohu

谈谈Memcached与Redis jquery ui dialog弹出窗 清空缓存Cache或强制刷新 Android中,在onAnimationEnd方法中调用 viewgroup.removeview,报 nullpointerexception异常的解决方法 .NET 应用内存泄漏的诊断 discuz NT 在IIS7上部署后,应用程序池停止 大型网站性能及安全 简述 .Net导出Excel的两种方法,导出Word亦类似 SqlServer2005 重建索引 SQL Server 2008下日志清理方法(非dump语句) iPhone消息推送机制(Push)实现及通过.net应用程序发送消息给ios应用程序 JS document.writeln 输出中文乱码问题的解决方法 JS javascript实现url编码和url解码(urlEncode urlDecode) IIS6配置GZIP压缩网页来提升网页浏览速度 MOSS视频教程 - Office SharePoint Server 2007开发与应用 IE8兼容IE7模式代码:X-UA-Compatible详解 利用ajax.dll进行asp.net ajax开发 Quartz的时间配置 网络负载均衡(NLB)及Session 同步相关 如何彻底卸载oracle
ASP.NET 递归算法 生成N级(级联)树TreeView
xiaohu · 2011-06-22 · via 博客园 - xiaohu

HTML代码:

view plaincopy to clipboardprint?
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<!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> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
        <asp:TreeView ID="TreeView1" runat="server" Height="257px" ImageSet="WindowsHelp" 
          Width="142px"> 
            <ParentNodeStyle Font-Bold="False" /> 
            <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" /> 
            <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px" 
                VerticalPadding="0px" /> 
            <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px" 
                NodeSpacing="0px" VerticalPadding="1px" /> 
        </asp:TreeView> 
          
      
    </div> 
    </form> 
</body> 
</html> 
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TreeView ID="TreeView1" runat="server" Height="257px" ImageSet="WindowsHelp"
          Width="142px">
            <ParentNodeStyle Font-Bold="False" />
            <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
            <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"
                VerticalPadding="0px" />
            <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px"
                NodeSpacing="0px" VerticalPadding="1px" />
        </asp:TreeView>
       
   
    </div>
    </form>
</body>
</html>
 

后台代码:

view plaincopy to clipboardprint?
using System.Web;  
using System.Web.Security;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.Web.UI.WebControls.WebParts;  
using System.Web.UI.HtmlControls;  
 
public partial class _Default : System.Web.UI.Page  
{  
    DataView dv;  
    DataTable dt;  
 
    protected void Page_Load(object sender, EventArgs e)  
    {  
 
        if (!Page.IsPostBack)  
        {  
    //数据库执行查询的方法就不写了。  
            Operator op = new Operator();  
//这里执行的是:select * from tabmenu  
            dt = op.Query();  
            //第一次加载时调用方法传参   
            CreateTree(0, null, dt, this.TreeView1);  
            this.TreeView1.ExpandAll();  
        }  
    }  
 
    /// <summary>   
    /// 创建一个树   
    /// </summary>   
    /// <param name="parentID">父ID</param>   
    /// <param name="node">节点</param>   
    /// <param name="dt">DataTable</param>   
    /// <param name="treeView">TreeView的名称</param>   
    public void CreateTree(int parentID, TreeNode node, DataTable dt, TreeView treeView)  
    {  
        //实例化一个DataView dt = 传入的DataTable   
        dv = new DataView(dt);  
        //筛选(相当于select * from tabMenu where menuParentID = 传入的 parentID)   
        dv.RowFilter = "[menuParentID]=" + parentID;  
 
        //用foreach遍历dv   
        foreach (DataRowView row in dv)  
        {  
            //第一次加载时为空   
            if (node == null)  
            {  
                //创建根节点   
                TreeNode root = new TreeNode();  
                //必须与数据库的对应   
                root.Text = row["menuName"].ToString();  
                root.Value = row["menuID"].ToString();  
                //添加根节点   
                this.TreeView1.Nodes.Add(root);  
                //递归调用方法本身   
                CreateTree(int.Parse(row["menuID"].ToString()), root, dt, treeView);  
 
            }  
            else 
            {  
                //添加子节点   
                TreeNode childNode = new TreeNode();  
                childNode.Text = row["menuName"].ToString();  
                childNode.Value = row["menuID"].ToString();  
                node.ChildNodes.Add(childNode);  
                CreateTree(int.Parse(row["menuID"].ToString()), childNode, dt, treeView);  
 
            }  
        }  
 
    }  

using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    DataView dv;
    DataTable dt;

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
    //数据库执行查询的方法就不写了。
            Operator op = new Operator();
//这里执行的是:select * from tabmenu
            dt = op.Query();
            //第一次加载时调用方法传参
            CreateTree(0, null, dt, this.TreeView1);
            this.TreeView1.ExpandAll();
        }
    }

    /// <summary>
    /// 创建一个树
    /// </summary>
    /// <param name="parentID">父ID</param>
    /// <param name="node">节点</param>
    /// <param name="dt">DataTable</param>
    /// <param name="treeView">TreeView的名称</param>
    public void CreateTree(int parentID, TreeNode node, DataTable dt, TreeView treeView)
    {
        //实例化一个DataView dt = 传入的DataTable
        dv = new DataView(dt);
        //筛选(相当于select * from tabMenu where menuParentID = 传入的 parentID)
        dv.RowFilter = "[menuParentID]=" + parentID;

        //用foreach遍历dv
        foreach (DataRowView row in dv)
        {
            //第一次加载时为空
            if (node == null)
            {
                //创建根节点
                TreeNode root = new TreeNode();
                //必须与数据库的对应
                root.Text = row["menuName"].ToString();
                root.Value = row["menuID"].ToString();
                //添加根节点
                this.TreeView1.Nodes.Add(root);
                //递归调用方法本身
                CreateTree(int.Parse(row["menuID"].ToString()), root, dt, treeView);

            }
            else
            {
                //添加子节点
                TreeNode childNode = new TreeNode();
                childNode.Text = row["menuName"].ToString();
                childNode.Value = row["menuID"].ToString();
                node.ChildNodes.Add(childNode);
                CreateTree(int.Parse(row["menuID"].ToString()), childNode, dt, treeView);

            }
        }

    }
}
 

数据库代码:

view plaincopy to clipboardprint?
create table tabMenu  
(  
   menuID int identity(1,1) primary key,--自动编号  
   menuParentID int not null,--上级菜单的编号  
   menuName varchar(20) not null,--菜单名称  
   menuUrl varchar(20) not null,--菜单地址  
   menuImage varchar(20) not null, --图片地址  
   menuTarget varchar(20) not null,--打开方式  
)  
go  
--0表示根节点  
insert into tabMenu   
values(0,'xx后台管理','','','')  
 
--1子节点  
insert into tabMenu   
values(1,'学生管理','','','')  
 
insert into tabMenu   
values(1,'班级管理','','','')  
--2级节点  
insert into tabMenu   
values(2,'S1','','','')  
 
insert into tabMenu   
values(2,'S2','','','')  
 
insert into tabMenu   
values(2,'s3','','','')  
--3级节点  
 
insert into tabMenu   
values(3,'S1','','','')  
 
insert into tabMenu   
values(3,'S2','','','')  
 
insert into tabMenu   
values(3,'s3','','','')  
 
insert into tabMenu   
values(4,'Ccc','','','')  
 
insert into tabMenu   
values(5,'bbb,'','','')  
 
insert into tabMenu   
values(6,'fff','','','')  
--  
insert into tabMenu   
values(7,'stu1','','','')  
 
insert into tabMenu   
values(8,'stu2','','','')  
 
insert into tabMenu   
values(9,'stu1','','','')  
select * from tabMenu  
go