转载:http://www.cnblogs.com/igoogleyou/archive/2012/12/17/treeview2.html

一,通过查询数据库的方法

ID 为主键,PID 表明数据之间的关系。

/// <summary>
/// 生产树的代码;
/// </summary>
/// <param name="node"> 根节点</param>
/// <param name="id">主键</param> private void CreateTwo(TreeNode node, int id)
{
string strSql = "select * from TableTest where PID = " + id;
DataTable dt = SqlClass.GetTable(strSql);
if (id == ) // id = 0 是根节点
{
for (int i = ; i < dt.Rows.Count; i++)
{
TreeNode nd = new TreeNode();
nd.Text = dt.Rows[i]["Name"].ToString();
CreateTwo(nd, Convert.ToInt32(dt.Rows[i]["id"].ToString()));
tvwTwo.Nodes.Add(nd);
}
}
else
{
for (int i = ; i < dt.Rows.Count; i++)
{
TreeNode Tnode = new TreeNode();
Tnode.Text = dt.Rows[i]["Name"].ToString();
CreateTwo(Tnode, Convert.ToInt32(dt.Rows[i]["id"].ToString()));
node.Nodes.Add(Tnode);
}
}
}

 
 
则个代码比较简单 只需要查询一个数据表。
不过会查询多次,我觉得不合适。
所以第二个方法,全部拿出来,在缓存里操作。
 

生成结果:

-------------------------------------------------------------------------------------------------------------------------------

二,通过linq 获取菜单的通用方法:

static void Main(string[] args)
{
//最终结果
UserR ur = new UserR();
//调用
Create(ur, );
//打印
Print(ur);
string str = JsonConvert.SerializeObject(ur);
Console.ReadLine();
}
//测试数据
static List<User> list = new List<User>()
{
new User(){id=,name="food",parentId=},
new User(){id=,name="fruit",parentId=},
new User(){id=,name="red",parentId=},
new User(){id=,name="cherry",parentId=},
new User(){id=,name="yellow",parentId=},
new User(){id=,name="banana",parentId=},
new User(){id=,name="meat",parentId=},
new User(){id=,name="beef",parentId=},
new User(){id=,name="pork",parentId=},
}; //递归遍历
private static void Create(UserR node, int id)
{
var q = list.Where(x => x.parentId == id).ToList();
for (int i = ; i < q.Count; i++)
{
UserR nd = new UserR();
nd.id = q[i].id;
nd.name = q[i].name;
Create(nd, q[i].id);
node.u.Add(nd);
} } //打印查看结果
static void Print(UserR ur)
{
Console.WriteLine(ur.name);
if (ur.u != null)
foreach (var item in ur.u)
{
Print(item);
}
} //查询出的实体层
public class User
{
public int id { get; set; }
public string name { get; set; }
public int parentId { get; set; }
}
//遍历后的实体层
public class UserR
{
public int id { get; set; }
public string name { get; set; }
public List<UserR> u = new List<UserR>();
public int parentId { get; set; }
}
 

Tree 菜单 递归的更多相关文章

  1. 如何使用 JSP JSTL 显示/制作树(tree) 菜单

    JSTL里面并没有直接制作tree菜单的元素,因此递归是JSP JSTL显示/制作tree菜单的唯一方法. 以下详述如何制作tree菜单. 首先,在主页面里面增加包含制作树菜单的jsp,例如: 在my ...

  2. PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)

    关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datag ...

  3. MenuStrip菜单递归

    C# TreeView菜单,MenuStrip菜单递归动态生成例子 http://www.cnblogs.com/ajiaojiao0303/articles/1884772.html http:// ...

  4. Extjs中创建Tree菜单【一】

    此篇treepanel的描写是很简单,没有太大的难度,在学习时,可以先熟悉tree的一些配置信息.属性.方法和事件. 然后先写一个简单的例子,慢慢了解从中如何实现的,然后在慢慢的深入了解,实现一些复杂 ...

  5. python之三层菜单递归

    首先非常感谢11期的学长薜保库提供了一种非常实用函数递归方法,让实现三层菜单如此简单,不过对所遍历的嵌套字典或列表格式有所要求.有特定的环境下非常实用. 主要针对中国的各省市区进行展示,采用了百度的j ...

  6. C# 构造tree菜单工具方法

    如何构造tree数据结构,做个笔记,方便查阅,本方法是直接返回json字符串: private string ToMenuJson(List<Model> data, string par ...

  7. java构建树形菜单递归工具类

    1.设计菜单实体 import java.util.List; public class Menu { //菜单id private Long id; //父节点id private Long par ...

  8. Tree菜单 复选框选中控制DEMO

    java 对应实体类属定义 public class AccoSysmanResource{        /**     * 资源类型     */    private Integer resou ...

  9. PHP+MySQL+Easyui tree菜单从后台加载json数据(一)

    实现功能:从数据库加载出所有的数据库名,相应的数据库加载对应的数据库表名 原理:(首先看一下参考手册的内容) 异步加载Tree tree 支持内置的异步加载模式,用户创建一个空的tree,然后定义一个 ...

随机推荐

  1. kubernete 数据库 etcd

    etcdctl --cert-file /etc/ssl/etcd/ssl/member-pserver78.pem --key-file /etc/ssl/etcd/ssl/member-pserv ...

  2. python中#!/usr/bin/python与#!/usr/bin/env python的区别

    目的是在运行python脚本的时候告诉操作系统我们要用python解释器去运行py脚本 所以我们在第一句往往会写如下两句中的其中一句: #!/usr/bin/python 或 >#!/usr/b ...

  3. 随机指定范围内N个不重复的数

    此为工具类,支持抽奖业务需求,具体实现见下方代码: package com.org.test; import java.util.ArrayList; import java.util.List; p ...

  4. ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)

    阅读目录 在Asp.Net Core 中使用外部登陆(google.微博...) 中间件管道 The Authentication Middleware The Challenge 与认证中间件进行交 ...

  5. 使用odoo官方dockerfile 创建最新版镜像

    以odoo11.0为例 1.检出odoo/docker仓:git clone https://github.com/odoo/docker.git 2.打开目录 http://nightly.odoo ...

  6. linux shell的here document用法

    转载自: http://my.oschina.net/u/1032146/blog/146941 什么是Here Document?Here Document 是在Linux Shell 中的一种特殊 ...

  7. 绍一集训Round#1

    到了之后看题,T1一看发现真熟悉,和之前做的一道题真的像,然后内心: 这里是绍一啊,不可能就出这么简单的题 我题意没理解错啊,这不是单独计算每条边的贡献么 维护一个人数的大小,然后直接搞一波就可以了吧 ...

  8. java缓存技术的介绍

    一.什么是缓存1.Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问2.凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之 ...

  9. .net mvc数据库操作添加数据的几中方法

    1. Defining sets on a derived context 1) DbSet属性:指定集合为Entity类型 2) IDbSet属性 3) 只读set属性 public IDbSet& ...

  10. 5分钟入门自动化测试——你应该学会的Postman用法(2)

    前言 之前的一篇文章<你应该学会的Postman用法>,主要介绍了postman的一些高级的用法,便于日常开发和调试使用,本文的基础是对postman的基本使用以及一些高级用法有一定的了解 ...