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

推荐订阅源

G
Google Developers Blog
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
人人都是产品经理
人人都是产品经理
美团技术团队
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
博客园 - 【当耐特】
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 叶小钗
Google DeepMind News
Google DeepMind News
量子位
罗磊的独立博客
月光博客
月光博客
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
博客园_首页
P
Proofpoint News Feed
Jina AI
Jina AI
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
腾讯CDC

博客园 - 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