Asp.net treeview实现无限级树

Linux内存压力测试工具【memtester】详且精 对Linux下的压力测试工具memtester有一个比较人性化的概述,以及避坑心得。 阅读详情

最近研究了一下treeview,发现有两种实现无限级树的方法,文字不想多写,直入主题。

 

 

先看看数据库表的设计,数据表主要包括ID,Name,ParentID这三项,其中ID是主键,ParentID对应节点的父节点:

 

 

 

方法一:用递归遍历数据,并将节点逐个添加到treeview中去。

1.先进行数据库连接和数据的读取,并将根节点先添加进treeview中,并利用递归getTreeView()实现数据的遍历和添加,其中要用到栈Stack<>:

 protected void Page_Load(object sender, EventArgs e)
        {
           
            if (!Page.IsPostBack)
            {
                TreeNode nodeCategory ;
                connection conn = new connection();
                List<Category> category = conn.getCategory();
                Stack<Category> storeCategory = new Stack<Category>();
                storeCategory.Push(category[0]);
                nodeCategory = new TreeNode(category[0].Name.Trim(), category[0].Id.Trim());
                TreeView1.Nodes.Add(nodeCategory);
                getTreeView(storeCategory, category, nodeCategory);
                               
            }
        }

2.数据遍历的递归函数,比较简单就不多说了。

 public void getTreeView(Stack<Category> categoryStack,List<Category> categoryList,TreeNode e)
        {
            Category tmp;
            if(categoryStack.Count>0)
            {
                tmp=categoryStack.Pop();
                for(int i=0;i<categoryList.Count;i++)
                    if(categoryList[i].ParentId.Trim()==tmp.Id.Trim())
                    {
                        categoryStack.Push(categoryList[i]);
                        TreeNode childNote = new TreeNode(categoryList[i].Name.Trim(), categoryList[i].Id.Trim());
                        e.ChildNodes.Add(childNote);
                        getTreeView(categoryStack, categoryList, childNote);
                    }
            }
        }

方法二:用TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)事件响应来逐个读取子节点。

1.第一步基本和上一方法的第一步一致,只是要将节点的设置为不展开。

protected void Page_Load(object sender, EventArgs e)
        {
           
            if (!Page.IsPostBack)
            {
                TreeNode nodeCategory ;
                connection conn = new connection();
                List<Category> category = conn.getCategory();
                nodeCategory = new TreeNode(category[0].Name.Trim(), category[0].Id.Trim());
                nodeCategory.PopulateOnDemand = true;
                nodeCategory.Collapse();
                nodeCategory.NavigateUrl = "http://blog.csdn.net/longlongago2000";
                nodeCategory.Target = "_blank";
                TreeView1.Nodes.Add(nodeCategory);
             }
        }

2.再改写TreeView1_TreeNodePopulate(),根据鼠标的点击得到该节点的ID,然后根据该ID进行数据的读取,将其下的子节点读出。

protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {

            int categoryID = Int32.Parse(e.Node.Value);
            connection conn = new connection();
            List<Category> category = conn.getCategory();
            foreach (Category tmp in category)
            {
                if (categoryID.ToString() == tmp.ParentId.Trim())
                {
                    TreeNode childNote = new TreeNode(tmp.Name.Trim(), tmp.Id.Trim());

                    foreach (Category cate in category)
                    {
                        if (tmp.Id.Trim() == cate.ParentId.Trim())
                        {
                            childNote.PopulateOnDemand = true;

                            childNote.Collapse();
                            break;

                        }
                        else
                            childNote.Expand();
                    }

                    childNote.NavigateUrl ="http://blog.csdn.net/longlongago2000" ;
                    childNote.Target = "_blank";
                    e.Node.ChildNodes.Add(childNote);
                }
            }
以上两种方法都可以实现无限级分类,不过第一种方法显然更好一些,第二种方法不可以实现全部展开功能,而第一种可以。

以上原创,本人博客地址:http://blog.csdn.net/longlongago2000

避坑指南:ZYNQ PS端读写BRAM时容易忽略的5个配置细节(基于Vivado 2022.1) 本文基于Vivado 2022.1,总结了ZYNQ PS端读写单口BRAM时5个易被忽略的关键配置细节。内容涵盖关闭Safety Circuit以优化时序、精确匹配AXI控制器与BRAM的地址深度、注意PS端函数位宽与地址对齐、正确连接时钟复位域,并提供了实用的调试技巧与诊断代码,帮助工程师规避常见陷阱,确保数据交互稳定可靠。 阅读详情

相关推荐

asp.net形结构菜单demo/无限级分类/zTree

jquery的一个插件zTree.此demo是用vs08+sql2005写的 可任意修改 像样更多的功能和外观 就去zTree官网下一个 我写的这个是动态的 就是说是连接数据库的 class表 必须的字段 ID 父ID 还有类别名称。 不懂的可以随时问我

ASP.net 2005 Treeview 无限分类非地递归终极解决方案

这几天在写HRM的时候 这问题搞了我两天,哈哈!开始在使用Google 找了半天都是一堆垃圾,都是使用算法的较多, 后来就去了www.asp.net 找到点启示。好了废话多说无用。首先表结构如下 表名 Test 写个存储过程 GetTreeview这个不用我说了吧下面用到  为了速度缓存DataTable        Public Function GetTr

shadowsky的专栏 3417

asp.net TreeView 与 GridView 相结合管理无限极分类很好用

asp.net TreeView 与 GridView 相结合管理无限极分类,本资源用javascript脚步实现选中离开后依然保持变色,直到选中另一个节点

C# ASP.Net 多级分类Treeview实现

数据库:Category varchar(Max) not null;CategoryName varchar(Max) not null;ParentID varchar(Max) not null; 每个分类ID采用两位数字字符 例如:00,01,02为最顶级大类       0001,0002,0003为00大类下的三个小类       0100,0101

mikalee的专栏 1713

asp.net TreeView 默认展开二级菜单

在数据绑定之后进行 foreach (TreeNode item in TreeViewTest.Nodes) { item.Expanded = true; }

TianGaojie123abc的专栏 3103

asp.net2.0利用TreeView实现无限级型菜单

闲话不说,下面开始:第一步:创建一个asp.net工程,命名为TreeViewTest(自己喜欢吧,叫什么都可以)。第二步:在工程中添加一个XML文件,命名为TreeSource.xml;将Default.aspx切换到设计视图,拽进一个TreeView控件命名为TreeView1和一个XmlDataSource控件命名为XmlDataSource1,配置TreeView1的数据源为Xml

xhlinlinxh的专栏 1870

Asp.net 2.0 Treeview 动态填充,并实现无限级

数据库表关键字段: 表: table1 type_id  type_name   per_type_id    0        根目录               -1    1        子目录                0    2        子目录2             0    3        子子目录              2

VaJoy童鞋的专栏 554

Asp.net treeview实现无限级实现代码

最近研究了一下treeview,发现有两种实现无限级的方法,文字不想多写,直入主题。 先看看效果图:先看看数据库表的设计,数据表主要包括ID,Name,ParentID这三项,其中ID是主键,ParentID对应节点的父节点:方法一:用递归遍历数据,并将节点逐个添加到treeview中去。 1.先进行数据库连接和数据的读取,并将根节点先添加进treeview中,并利用递归getT

370

ASP.NET无限级treeview控件、从数据库提取节点填充方案

注意:本文使用DataSet,如果要看DataReader的填充方案,请参照:http://blog.csdn.net/mail_ricklee/archive/2005/02/17/290515.aspx           使用控件为:Microsoft.Web.UI.WebControls.TreeView            可以适用于该控件所有填充方法,并从数据库提取数据       

夏天的专栏 3373

ASP.NET mvc tree 类似 TreeView 控件

mvc tree 支持mvc2 mvc3 具体请查看调用列子,很简单的。使用请详细看TreeData每个字段的意义。和asp.netTreeView 控件一样。

TreeView 控件与Vs2005(Asp.Net 2.0)

reeView 控件为状游览,类似于WINDOWS的资源管理器,TreeView 控件特点是信息 项呈状层次结构,能更清晰地表现主、细目关系,TreeView操作非常方便。ASP.net 2.0以前,TreeView 控件并非VS附带的控件,而是TreeView IE Web 控件,而需要到微软官方去下载;在ASP.net 2.0 中,一些新的更加方便的控件被加了进来,为了方便自己学习这些控件

luochengbang的专栏 876

TreeView 控件与Vs2005(Asp.Net 2.0)作者:NetFetch

 TreeView 控件为状游览,类似于WINDOWS的资源管理器,TreeView 控件特点是信息 项呈状层次结构,能更清晰地表现主、细目关系,TreeView操作非常方便。ASP.net 2.0以前,TreeView 控件并非VS附带的控件,而是TreeView IE Web 控件,而需要到微软官方去下载;在ASP.net 2.0 中,一些新的更加方便的控件被加了进来,为了方便自己学习这些

dekko的专栏 1745

ASP.NET中使用TreeView控件[系列]

ASP.NET中使用TreeView控件[系列]   发表时间:2004-10-9   作者:未知    简介   在2002年,Microsoft发布了四种ASP.NET Web控件,用于为使用 Microsoft Internet Explorer 的 Web 访问者提供更好的体验。这些 Web 控件称为 Internet Explorer Web 控件,也简称为 IE Web 控件,包括以下

农民田园 1847

AI入门别怕数学:用‘城市交通图’和‘成绩单’秒懂向量与矩阵

本文通过‘城市交通图’和‘成绩单’等生活场景,生动拆解线性代数的核心概念,帮助AI初学者轻松理解向量与矩阵。文章结合人工智能和数学基础,展示了线性代数在AI中的实际应用,如矩阵运算揭示城市连通性、向量分析学生成绩变化,为读者提供了一条从生活场景到AI技术的平滑学习路径。

weixin_30632089的博客 566

asp.net(C#)html无限分类 可新增 删除 修改

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProductSort.aspx.cs" Inherits="ChaoFenPlat_ProductSort" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http...

diehe5608的博客 238

无限级分类Asp.net Mvc实现

无限级分类Asp.net Mvc实现   无限级分类涉及到异步加载子类、加载当前类和匹配问题,现在做一个通用的实现。   (一) 效果如下:   (二)设计、实现及使用 (1)数据库 (a)表设计dbo.Categories 列名 类型 说明 CategoryId int 主键,增量为1的标识符

xiaxiazl的专栏 1879

Inkscape矢量绘图全流程操作参考手册(含导出、描摹、路径编辑与扩展功能)

一套完整的Inkscape离线使用文档,覆盖从界面认知、基础绘图、路径创建与编辑、填充与描边设置,到图形导出、位图描摹、文本排版、滤镜应用、吸附对齐、网页适配、图案平铺、变换操作等核心功能。包含多个实操示例页面,如AShortExample.html(快速入门)、ATracingExample.html(位图转矢量)、SoupCan.html(3D罐体建模)、TilePattern.html(无缝贴图生成),以及Extensions目录下各类渲染、路径生成与修改扩展的说明。CSS样式文件(manual.css、mobile.css等)支持多端阅读,Glossary.html提供术语解释,Snapping.html详解对齐机制,Web-Use.html说明SVG网页嵌入要点。所有HTML页面可本地直接打开浏览,无需联网,适合初学者系统学习和进阶用户随时查阅关键操作步骤。

上一篇: 基于OpenCV与MFC的大家来找茬外挂[升级版]
下一篇: 连连看外挂制作–基于OpenCV&VC++
longlongago2000
博客等级 码龄19年 142粉丝 66原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值