先来看看效果,基本上就是这样的。

所谓树,无非就是2点,第一个:根节点,第二:叶子节点,其中叶子节点中还可能有叶子节点,但是根节点始终只有一个。

下面贴上 各部分的代码

1.PAGE_LOAD载入事件。

    protected void Page_Load(object sender, EventArgs e)
{
BindTree(); //绑定树
}

2.BindTree方法。

    private void BindTree()
{
DataSet ds = new DataSet(); //这里的DS里不存在数据,具体情况请大家自己具体考虑,修改代码 TreeView1.Nodes.Clear(); AddTree("-1", (TreeNode)null,ds);
TreeView1.Nodes[0].Expanded = true;
}

3.AddTree方法,递归添加树。

/*其中ds对应的是一个实体类Model,里面的IndexName,IndexID等,都是对应着数据库里的相应字段所以我们在使用这个方法时前,必须先得到相对应的有具体意义的DataSet*/

 /// <summary>
/// 递归树
/// </summary>
/// <param name="ParentID">当前节点父节点ID</param>
/// <param name="pNode"></param>
/// <param name="ds"></param>
private void AddTree(string ParentID, TreeNode pNode,DataSet ds)
{
DataView dvTree = new DataView(ds.Tables[0]); //用DataView来模拟DataTable,因为DV是虚拟的表,所以可以提高效率
foreach (DataRowView Row in dvTree)
{
TreeNode node = new TreeNode();
if (pNode == null)
{ //添加根节点
node.Text = Row["IndexName"].ToString();
node.Value = Row["IndexID"].ToString(); if (Row["IndexClass"].ToString() == "0")
{
node.NavigateUrl = "IndexInfo1.aspx?IndexID=" + node.Value;
}
else
{
node.NavigateUrl = "IndexInfo2.aspx?IndexID=" + node.Value;
} node.Target = "mainFrame";
node.Expanded = false;
TreeView1.Nodes.Add(node); //添加根节点
AddTree(Row["IndexID"].ToString(), node,ds); //递归,添加子节点,这段递归是必须的,不然只会添加根节点,而进不到下面的else语句,pNode在TreeView第二次执行以后都是不为空的,所以会一直跳到执行ELSE语句里的内容。 }
else
{ //添加当前节点的子节点 node.Text = Row["IndexName"].ToString();
node.Value = Row["IndexID"].ToString();
node.ToolTip = node.Text;
if (Row["IndexClass"].ToString() == "0" || Row["IndexParentID"].ToString() == "-1")
{ node.NavigateUrl = "IndexInfo1.aspx?IndexID=" + node.Value;
}
else
{ node.NavigateUrl = "IndexInfo2.aspx?IndexID=" + node.Value;
} node.Target = "Frame1"; //某一个节点指向的一个IFRAME,里面可以是这个节点下的具体内容。
//node.NavigateUrl = Request.Url.LocalPath + "?OrgID=" + Row["OrgID"].ToString();
node.Expanded = false;
pNode.ChildNodes.Add(node); //pNode为父节点,把Node作为子节点添加进去
AddTree(Row["IndexID"].ToString(), node,ds); //递归添加子节点
} } }

  

 

ASP.NET通过递归添加树(Treeview)的更多相关文章

  1. ASP.NET递归添加树节点

    表设计如图: id        title         parentid 1         asp.net   0 2         c#           0 3         c#_ ...

  2. Xml学习笔记(3)利用递归解析Xml文档添加到TreeView中

    利用递归解析Xml文档添加到TreeView中 private void Form1_Load(object sender, EventArgs e) { XmlDocument doc = new ...

  3. 菜鸟笔记:node.js+mysql中将JSON数据构建为树(递归制作树状菜单数据接口)

    初学Web端开发,今天是第一次将所学做随笔记录,肯定存在多处欠妥,望大家海涵:若有不足,望大家批评指正. 进实验室后分配到的第一个项目,需要制作一个不确定层级树形菜单的数据接口,对于从来没实战编过程的 ...

  4. ASP.NET MVC 5 - 添加一个模型

    在本节中,您将添加一些类,这些类用于管理数据库中的电影.这些类是ASP.NET MVC 应用程序中的"模型(Model)". 您将使用.NET Framework 数据访问技术En ...

  5. [Asp.net MVC]Asp.net MVC5系列——添加模型

    目录 概述 添加模型 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 概述 在本节中我们将追加 ...

  6. [Asp.net MVC]Asp.net MVC5系列——添加数据

    目录 概述 显示添加数据时所用表单 处理HTTP-POST 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列 ...

  7. 05-XML遍历递归显示到TreeView上(XDocument类)

    1.XML文件(x1.xml): <?xml version="1.0" encoding="utf-8" ?> <itcast> &l ...

  8. 返璞归真 asp.net mvc (1) - 添加、查询、更新和删除的 Demo

    原文:返璞归真 asp.net mvc (1) - 添加.查询.更新和删除的 Demo [索引页] [源码下载] 返璞归真 asp.net mvc (1) - 添加.查询.更新和删除的 Demo 作者 ...

  9. ASP.NET网页动态添加、更新或删除数据行

    ASP.NET网页动态添加.更新或删除数据行 看过此篇<ASP.NET网页动态添加数据行> http://www.cnblogs.com/insus/p/3247935.html的网友,也 ...

随机推荐

  1. 关于i++,++i 的理解

    由于经常有同学在遇到 i++.++i 时犯困难.所以举例说明一下: int i = 20;        int sum = i++ * 30; //这个等式中 i = 20        int s ...

  2. SQL 存储过程 传入数组参数

    今天在做统计数据的时候,传入数组导致数据不显示.解决方式和大家分享一下: --参数@CompanyName='北京,天津,上海' DECLARE @PointerPrev int     DECLAR ...

  3. jQuery代码节选(css)

    CSS 1.css<p class="p1">1</p> $("p").css("color");获取css属性值$ ...

  4. reconnectingwebsocket.js

    // MIT License: // // Copyright (c) 2010-2012, Joe Walnes // // Permission is hereby granted, free o ...

  5. Apache服务器在80端口配置多域名虚拟主机的方法

    我们在配置一台服务器的时候,如果只运行一个站点,往往过于浪费资源.Nginx和Apache都可以通过配置虚拟主机实现多站点.配置虚拟主机的方式主要有两种,一种是多个不同端口对应的多个虚拟主机站点,一种 ...

  6. Java面试查漏补缺

    一.基础 1.&和&&的区别. [概述] &&只能用作逻辑与(and)运算符(具有短路功能):但是&可以作为逻辑与运算符(是“无条件与”,即没有短路的功 ...

  7. JAVA演算法---約瑟夫問題

    1 public class Josephus { public static int[] arrayOfJosephus( int number, int per) { 3 int[] man = ...

  8. PostgreSQL 与 MySQL 相比,优势何在?

    一. PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃.断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统 ...

  9. ABP框架理论学习之后台工作(Jobs)和后台工作者(Workers)

    返回总目录 本篇目录 介绍 后台工作 后台工作者 让你的应用程序一直运行 介绍 ABP提供了后台工作和后台工作者,它们会在应用程序的后台线程中执行一些任务. 后台工作 后台工作以队列和持续的方式在后台 ...

  10. WCF服务的异常消息

    原创地址:http://www.cnblogs.com/jfzhu/p/4055024.html 转载请注明出处 WCF Service发生异常的时候,客户端一般只能看见这样一个错误:“The ser ...