转载: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. Android 新加几个开源项目

    http://www.androidviews.net  http://www.theultimateandroidlibrary.com test 最低版本: 简介: 地址: 效果图: test A ...

  2. 创建http.Server实例,端口占用就换个端口

    /** * Created by Sorrow.X on 2017/10/25. */ const http = require('http'); const url = require('url') ...

  3. java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application-dev.yml'

    如果你的项目没有配置错误,配置文件名称也正常,还出现这个问题,那一定是你的yml文件编码的问题 先附上一张项目架构图 当我启动服务器寻找配置文件的时候,服务器提示这样的错误信息 java.lang.I ...

  4. iOS开发简记(3):tips提示

    我有一个需求:在点击或长按某个按钮时,需要显示提示,包括简单的文字提示,还有复杂一点的图片甚至是动态图的提示(可能还要加上文字). (1)文字tips 使用之前介绍的qmuikit里面的QMUITip ...

  5. Socket入门笔记 用TcpClient实现一个简易聊天室

    效果 实现思路 使用TcpListener建一个服务器,接收所有客户端发送的消息,然后由服务器再发送到其他客户端 客户端使用TcpClient,发消息给服务器,接收服务器的消息,不和其他客户端直接交互 ...

  6. Nginx+keepalived 双机热备(主主模式)

    之前已经介绍了Nginx+Keepalived双机热备的主从模式,今天在此基础上说下主主模式的配置. 由之前的配置信息可知:master机器(master-node):103.110.98.14/19 ...

  7. python基础学习笔记(十)

    魔法方法.属性 ------------------------ 准备工作 为了确保类是新型类,应该把 _metaclass_=type 入到你的模块的最开始. class NewType(Objec ...

  8. 002-打开文件管理规范-20190406.bat

    rem 002-打开文件管理规范-20190406.bat start /max https://www.cnblogs.com/delphixx/p/10652763.htmlcopy %~0 C: ...

  9. 701 D. As Fast As Possible

    ###链接 [http://codeforces.com/group/1EzrFFyOc0/contest/701/problem/D] ###题意 n个人,走lm,有车但没人只能坐一次,车容量为k, ...

  10. javascript数据类型以及类型间的转化函数

    js 有五种基本数据类型,还有个引用类型 1.undefined 类型,只有一个志undefined 当变量未初始化时都会是这个类型. 2.null 类型,也是只有一个值null,null类型的typ ...