动态生成TreeView方法(一)

一般情况下生成TreeView我们用的是用递归不建议用递归数据量大了会慢,

小弟今天用SortedList集合实现一下没有技术含量,一看代码大家就会明白。个人也比较喜欢这种方法,数据量大了执行速度也可以。

下一篇方法动态生成TreeView(二)是用递归实现的,有时间可以看一下。

思路:

把节点放到SortedList,里再根据标识找到父节点,加上相应的子节点。

只是一个小例子,有很多方面不足,可以在这个例子上扩展,传参什么的可以自己在数据库里建,等等,让这个例子变成你自己的东西。

效果图:

 

前台页面:

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

<!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" Width="200px" >

</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;using System.Collections;namespace WebApplication3{public partial class TreeViewPage : System.Web.UI.Page    {private DataTable dt;protected void Page_Load(object sender, EventArgs e)        {

if (!IsPostBack)            {                dt = CreateTable();                CreateTree();            }        }

#region 生成树public void CreateTree()        {try            {//SortedList集合表示键/值对的集合,//这些键值对按键排序并可按照键和索引访问.如果不懂自己去查msdn                SortedList m_SortedList = new SortedList();

TreeNode treeNode = new TreeNode();if (dt.Rows.Count <= 0)                {                    treeNode.Text = "为空";                    treeNode.Value = "";                    treeNode.NavigateUrl = "";                    treeNode.Target = "";                    treeNode.Expanded = false;                    treeNode.SelectAction = TreeNodeSelectAction.SelectExpand;                }else                {for (int i = 0; i < dt.Rows.Count; i++)                    {//创建父节点                        if (dt.Rows[i]["Grade"].ToString() == "1")                        {                            TreeNode node = new TreeNode();                            node.Text = dt.Rows[i]["MenuName"].ToString();                            node.Value = dt.Rows[i]["MenuID"].ToString();if (dt.Rows[i]["Flag"].ToString() == "1")                            {                                node.NavigateUrl = dt.Rows[i]["href"].ToString();                                treeNode.Target = "_blank";                            }                            node.Expanded = false;                            node.SelectAction = TreeNodeSelectAction.Expand;                            m_SortedList.Add(node.Value, node);                            tv_Method.Nodes.Add(node);                        }else                        {//找到父节点                            TreeNode parentNode = (TreeNode)m_SortedList.GetByIndex(m_SortedList.IndexOfKey(dt.Rows[i]["ParentMenu"].ToString()));//创建子节点                            TreeNode childNode = new TreeNode();                            childNode.Text = dt.Rows[i]["MenuName"].ToString();                            childNode.Value = dt.Rows[i]["MenuID"].ToString();if (dt.Rows[i]["Flag"].ToString() == "1")                            {                                childNode.NavigateUrl = dt.Rows[i]["href"].ToString();                                treeNode.Target = "_blank";                            }                            childNode.Expanded = false;                            childNode.SelectAction = TreeNodeSelectAction.Expand;                            m_SortedList.Add(childNode.Value, childNode);                            parentNode.ChildNodes.Add(childNode);                        }                    }                }            }catch (Exception ex)            {throw ex;            }        }#endregion#region  创建Menu表public DataTable CreateTable()        {try            {                DataTable dt = new DataTable();                dt.Columns.Add("MenuID", typeof(string));                dt.Columns.Add("MenuName", typeof(string));                dt.Columns.Add("ParentMenu", typeof(string));//父节点                dt.Columns.Add("Grade", typeof(int));//标识这是第几级节点                dt.Columns.Add("Flag", typeof(int));//标识,是不是尾结点,1是 0 不是                dt.Columns.Add("href", typeof(string));//指向的链接                DataRow dr = dt.NewRow();                dr["MenuID"] = "Menu01";                dr["MenuName"] = "第一级";                dr["ParentMenu"] = "";                dr["Grade"] = 1;                dr["Flag"] = 1;                dr["href"] = "one.aspx";                dt.Rows.Add(dr);                dr = dt.NewRow();                dr["MenuID"] = "Menu02";                dr["MenuName"] = "第一级";                dr["ParentMenu"] = "";                dr["Grade"] = 1;                dr["Flag"] = 0;                dr["href"] = "";                dt.Rows.Add(dr);                dr = dt.NewRow();                dr["MenuID"] = "Menu0201";                dr["MenuName"] = "第一下一级";                dr["ParentMenu"] = "Menu02";                dr["Grade"] = 2;                dr["Flag"] = 1;                dr["href"] = "one.aspx";                dt.Rows.Add(dr);                dr = dt.NewRow();                dr["MenuID"] = "Menu0202";                dr["MenuName"] = "第一下一级";                dr["ParentMenu"] = "Menu02";                dr["Grade"] = 2;                dr["Flag"] = 1;                dr["href"] = "";                dt.Rows.Add(dr);                dr = dt.NewRow();                dr["MenuID"] = "Menu020201";                dr["MenuName"] = "第一下一下一级";                dr["ParentMenu"] = "Menu0202";                dr["Grade"] = 2;                dr["Flag"] = 1;                dr["href"] = "one.aspx";                dt.Rows.Add(dr);                dr = dt.NewRow();                dr["MenuID"] = "Menu03";                dr["MenuName"] = "第一级";                dr["ParentMenu"] = "";                dr["Grade"] = 1;                dr["Flag"] = 1;                dr["href"] = "one.aspx";                dt.Rows.Add(dr);return dt;            }catch (Exception ex)            {throw ex;            }        }#endregion    }}

 

时间: 2024-09-26 22:10:35

动态生成TreeView方法(一)的相关文章

动态生成TreeView方法(二)

这次是用递归的方法实现 ,我想大家都知道怎么做吧,就不 多说了, 还是不建议用递归,数据量大了会映响速度,动态生成TreeView方法(一)是我比较喜欢的方法 看一下效果图 前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewPageTwo.aspx.cs" Inherits="WebApplication3.TreeViewPageTwo

WPF动态生成TreeView 之后点击树中的一个节点,怎么打开一个新界面,类似VS一样

问题描述 WPF动态生成TreeView之后点击树中的一个节点,怎么打开一个新界面,类似VS一样<!--treeview的代码--><TreeViewx:Name="tvMenu"ItemsSource="{BindingSource={x:Staticlocal:TreeViewData.Data},Path=RootNodes}"HorizontalContentAlignment="Stretch"Background=&

JavaScript 动态生成方法的例子_javascript技巧

复制代码 代码如下: function User(properties){ for(var i in properties){ //遍历该对象的所有属性,并保证其作用于正确 (function(which){ var p=i; which["get"+p]=function(){ //动态生成的方法 return properties[p]; //返回对象的属性值 }; which["set"+p]=function(val){ //动态生成的方法 properti

用ASP动态生成JavaScript的表单验证代码

javascript|表单验证|动态 表单的验证是开发WEB应用程序中常遇到的一关.有时候我们必须保证表单的某些项必须填写.必须为数字.必须是指定的位数等等,这时候就要用到表单验证了,一般我们常用的表单验证有2种方式: 1.编写JavaScript或VBScript的表单验证函数,在客户端进行验证:2.在表单提交后,使用ASP的方法Request.Form获取表单的输入值进行判断,然后返回结果,这是在服务端进行验证: 这2种方式都有其优缺点,比如第1种方式速度比较快,而且通常使用警告框的方式,用

用ASP动态生成JS的表单验证代码

js|表单验证|动态 表单的验证是开发WEB应用程序中常遇到的一关.有时候我们必须保证表单的某些项必须填写.必须为数字.必须是指定的位数等等,这时候就要用到表单验证了,一般我们常用的表单验证有2种方式: 1.编写JavaScript或VBScript的表单验证函数,在客户端进行验证: 2.在表单提交后,使用ASP的方法Request.Form获取表单的输入值进行判断,然后返回结果,这是在服务端进行验证: 这两种方式都有其优缺点,比如第1种方式速度比较快,而且通常使用警告框的方式,用户能够很快的根

php动态生成缩略图并输出显示的方法

    下面为你介绍了php动态生成缩略图并输出显示的方法,涉及php操作图片的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php动态生成缩略图并输出显示的方法.分享给大家供大家参考.具体如下: 调用方法: ? 1 <img src="thumbs.php?filename=photo.jpg&width=100&height=100"> 此代码可以为大图片动态生成缩略图显示,图片在内存中生成,不在硬盘生成真实文件 thumbs.php文

php动态生成版权所有信息的方法

 这篇文章主要介绍了php动态生成版权所有信息的方法,实例分析了php时间与字符串的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php动态生成版权所有信息的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 function copyright($start, $owner) { $date = date('Y'); echo " Copyright "; if ( $start < $date ) { echo &

JS控制网页动态生成任意行列数表格的方法

 这篇文章主要介绍了JS控制网页动态生成任意行列数表格的方法,实例分析了javascript操作表格节点控制dom元素添加的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JS控制网页动态生成任意行列数表格的方法.分享给大家供大家参考.具体分析如下: 这是一个非常简单使用的JS在线生成表格的代码效果 通过JS功能代码,直接输入行数和列数就可以自动生成你需要的表格 当然你也可以扩展JS代码实现生成文字的各种形式   代码如下: <html> <head> &l

JqueryMobile动态生成listView并实现刷新的两种方法

 本篇文章主要是对JqueryMobile动态生成listView并实现刷新的两种方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 JqueryMobile动态生成listView并实现刷新的两种方法   代码如下: function queryEntfernungen(tx, results)    alert("This Hello works");    var len = results.rows.length;      // This For works fin