动态生成TreeView方法(二)

这次是用递归的方法实现 ,我想大家都知道怎么做吧,就不 多说了,

还是不建议用递归,数据量大了会映响速度,动态生成TreeView方法(一)是我比较喜欢的方法

看一下效果图

前台代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewPageTwo.aspx.cs" Inherits="WebApplication3.TreeViewPageTwo" %>

<!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="tv_Method" runat="server">
        
        </asp:TreeView>
    </div>
    </form>
</body>
</html>

后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
namespace WebApplication3
{
    public partial class TreeViewPageTwo : System.Web.UI.Page
    {
        private DataTable da = new DataTable(); 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                da = CreateTable();
                CreateNode();
            }
            
        }

        //创建父节点
        public void CreateNode()
        {
            DataRow[] rows = da.Select("parentID=0");//取出树的根节点
            if (rows.Length > 0)
            {
                foreach (DataRow row in rows)
                {
                    TreeNode root = new TreeNode();//添加一个节点
                    root.Value = row["MenuID"].ToString();
                    root.Text = row["MenuName"].ToString();
                    root.Expanded = false;
                    root.SelectAction = TreeNodeSelectAction.Expand;
                    tv_Method.Nodes.Add(root);
                    CreateChildNode(root, da);//调用添加子节点
                }
            }
            else
            {
                TreeNode root = new TreeNode();//添加一个节点
                root.Value = "为空";
                root.Text ="为空";
                root.Expanded = false;
                root.SelectAction = TreeNodeSelectAction.Expand;
                tv_Method.Nodes.Add(root);
            }
        }

        //创建孩子节点
        public void CreateChildNode(TreeNode parentNode, DataTable dt)
        {
            //获取父亲节点下面的所有子节点
            DataRow[] rows = dt.Select("parentID=" + parentNode.Value);
            if (rows.Length > 0)
            {
                foreach (DataRow row in rows)
                {
                    TreeNode node = new TreeNode();
                    node.Value = row["MenuID"].ToString();
                    node.Text = row["MenuName"].ToString();
                    node.Expanded = false;
                    node.SelectAction = TreeNodeSelectAction.Expand;
                    parentNode.ChildNodes.Add(node);
                    //递归调用添加子节点
                    CreateChildNode(node, dt);
                }
            }
        }
       
        //创建Table
        public DataTable CreateTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("MenuID", Type.GetType("System.Int32"));
            dt.Columns.Add("parentID", Type.GetType("System.Int32"));
            dt.Columns.Add("MenuName", Type.GetType("System.String"));

            DataRow dr = dt.NewRow();
            dr["MenuID"] = 1;
            dr["parentID"] = 0;
            dr["MenuName"] = "中国";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["MenuID"] = 2;
            dr["parentID"] = 0;
            dr["MenuName"] = "日本";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["MenuID"] = 3;
            dr["parentID"] = 0;
            dr["MenuName"] = "美国";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["MenuID"] = 4;
            dr["parentID"] = 1;
            dr["MenuName"] = "朝阳区";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["MenuID"] = 5;
            dr["parentID"] = 1;
            dr["MenuName"] = "海淀区";
            dt.Rows.Add(dr);



            return dt;
        }
 


    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jackson0714

01.策略模式-上篇

3458
来自专栏lgp20151222

JSONObject和JSONArray区别及基本用法

        例如:   { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "con...

741
来自专栏王磊的博客

HttpWebRequest采集读取网站挂载Cookie的通用方法

Asp.net 版本 HttpWebRequest采集时添加:httpWebRequest.CookieContainer = new CookieContai...

2915
来自专栏Kotlin入门系列

C#控制台基础 将十六进制的字符串 转换成 十进制数

4515
来自专栏c#开发者

asp.net回调javascript

using System; using System.Collections; using System.IO; using System.Text; ...

3215
来自专栏hbbliyong

LINQ分页和排序,skip和Take 用法

LINQ分页和排序,skip和Take 用法 dbconn.BidRecord.OrderBy(p=>p.bid_id).ToList<BidRecord>()...

3779
来自专栏菩提树下的杨过

(Head First 设计模式)学习笔记(1)

把书中开篇duck问题的代码翻译成了c#版: 概述: 某游戏公司要设计一款鸭子的游戏,里面有各种各样的鸭子,有些会飞,有些会叫,但都会游泳。而且不同种类的鸭子...

2049
来自专栏cs

c sharp 的输入,输入,switch语句。

3025
来自专栏技术之路

动态生成TreeView方法(一)

一般情况下生成TreeView我们用的是用递归不建议用递归数据量大了会慢, 小弟今天用SortedList集合实现一下没有技术含量,一看代码大家就会明白。个人也...

1856
来自专栏菩提树下的杨过

温故而知新:类索引器

类索引器  1 using System;  2 using System.Collections.Generic;  3  4 namespace Pro...

20510

扫码关注云+社区