1.生成树节点对象

/// <summary>
/// 生成树的节点
/// </summary>
public class TreeNode
{
public TreeNode() {
Children = new List<TreeNode>();
}
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("text")]
public string Text { get; set; }
/// <summary>
/// open/closed
/// </summary>
[JsonProperty("state", NullValueHandling = NullValueHandling.Ignore)]
public string State { get; set; }
[JsonProperty("checked", NullValueHandling = NullValueHandling.Ignore)]
public bool? IsChecked { get; set; }
/// <summary>
/// Attributes对应的为json字符串
/// </summary>
[JsonProperty("attributes", NullValueHandling = NullValueHandling.Ignore)]
public dynamic Attributes { get; set; }
[JsonProperty("children", NullValueHandling = NullValueHandling.Ignore)]
public List<TreeNode> Children { get; set; }
}

其中应用了Newtonsoft.Json的属性,可以在生成Json时去掉一下不必要的属性。

2.递归生成树对象

/// <summary>
/// 递归生成数
/// </summary>
/// <param name="rootNode">树的根节点</param>
/// <param name="listModules">生成数的所有节点</param>
/// <param name="parentId">父节点id</param>
private void GetTreeByList(TreeNode rootNode, List<sys_module> listModules, string parentId)
{
var listParent = Sys_Module_B.GetChildrenByParentId(listModules, parentId);
foreach (var item in listParent)
{
var listChild = Sys_Module_B.GetChildrenByParentId(listModules, item.ModuleID);
TreeNode tn = new TreeNode();
tn.Id = item.ModuleID;
tn.Text = item.ModuleName + (string.IsNullOrEmpty(item.FunctionCode) ? "" : ("(" + item.FunctionCode + ")"));
tn.State = "open";
tn.Attributes = new {GrantedCode =""};//默认设置
  
if (listChild != null)
{
GetTreeByList(tn, listModules, item.ModuleID, dsRole);
}
rootNode.Children.Add(tn);
}
}

  这个方法递归生成了树对象。

3.获取子节点

/// <summary>
/// 根据父节点,找到所有子菜单module
/// </summary>
/// <param name="listModules"></param>
/// <param name="parentId"></param>
/// <returns></returns>
public static List<sys_module> GetChildrenByParentId(List<sys_module> listModules, string parentId)
{
List<sys_module> children = (from lm in listModules
where lm.ParentModuleID == parentId
select lm).ToList();
return children;
}

4.转换为json

//获取所有的菜单模块节点
List<sys_module> list = Sys_Module_B.SelectAllModules();
TreeNode node = new TreeNode();
GetTreeByList(node, list, moduleId);
string toJson = JsonTools.SerializeObject(node.Children);

记录一下~

递归生成树对象,应用于Easyui,Tree控件的更多相关文章

  1. easyui中tree控件添加自定义图标icon

    来源于:http://blog.163.com/lintianhuanhai@126/blog/static/165587366201421704420256/ <!DOCTYPE html&g ...

  2. [转]easyui常用控件及样式API中文收藏

    [转]easyui常用控件及样式收藏 2013-05-06 23:01 30612人阅读 评论(0) 收藏 举报  分类: java ee(5)  目录(?)[+] CSS类定义: div easyu ...

  3. webdynpro tree控件使用

    1.  首先创建一个TREE控件 2.  在Tree下面创建一个TREE  NODE  TYPE ,node type 是可以继续展开的,而Item type是无法展开的. 3. 创建node.,下面 ...

  4. DWZ (JUI) 教程 tree 控件的选中事件

    DWZ (JUI) 教程 tree 控件的选中事件 先简单说一下流程 第一步 当然是先定义好回调事件了 function checkCallback(json){ ........... ...... ...

  5. antd的Tree控件实现点击展开功能

    antd 的 Tree 控件没有提供点击展开的功能,只能通过左边的三角形实现展开和收起,没办法只好自己实现这个功能. 先看效果 如图实现的是类似 Mac 文件目录形式的结构,有箭头代表是个文件夹,点击 ...

  6. ElementUI Tree控件在懒加载模式下的重新加载和模糊查询

    之所以使用懒加载是为了提高性能,而且只有在懒加载模式下默认会给所有显示节点设置展开按钮.leaf也可以做到,但是要操作数据比较麻烦. 要实现懒加载模式下的模糊查询以及重新加载必须要使用data与laz ...

  7. 疑似easyui本身bug:easyui时间控件问题,试了几个版本都不行

    最近发现easyui时间控件的值格式不支持带斜杠的日期(2016/10/31),必须是2016-10-31这类的才能正常使用,否则默认初始化为当前时间 <input id="Retur ...

  8. 验证控件插图扩展控件ValidatorCalloutExtender(用于扩展验证控件)和TextBoxWatermarkExtender

    <asp:ScriptManager ID="ScriptManager1" runat="server">  </asp:ScriptMan ...

  9. EasyUI常用控件禁用方法

    EasyUI常用控件禁用方法: 1.validatebox可以用的用法:前两种适用于单个的validatebox; 第三种应用于整个form里面的输入框; <1>.$("#id& ...

随机推荐

  1. STL删除vector或list的方法及注意的问题

    删除vector中的元素 1.删除指定的所有对象 STL中remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除.若要真正移除,需要搭配使用erase().例子: vector ...

  2. javascript触发input-file的click事件

    概述 input:file本身自带的样式不太好看,但是又没法设置样式. 由于系统限制,不能通过代码触发,只允许用户自主点击. 通常的解决办法是,把input:file透明化,实际上点击的还是input ...

  3. 使用 phpMyAdmin无法登录mysql的问题

    今天使用使用phpmyadmin时出现了以下错误: (1)第一次时: 当配置文件config.inc.php里的配置项是: $cfg['Servers'][$i]['host'] = 'localho ...

  4. 高级应用与部署 —— 主程序与web目录分离

    在网站部署中,考虑网站的安全行问题,可以将您的网站主程序与web目录分离,使主程序在web目录之外,从而提高网站的安全性. 分离方法 1.将phpcms v9中程序主框架目录phpcms移动至web目 ...

  5. 线性表链式存储方式的C语言实现

    /* 编译器:Dev-c++ 5.1.0 文件名:linkList3.cpp 代码版本号:1.0 时间:2015年9月24日11:34:16 */ #include <stdio.h> # ...

  6. 转:为什么需要htons(), ntohl(), ntohs(),htons() 函数

    为什么需要htons(), ntohl(), ntohs(),htons() 函数: 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl ...

  7. COJ 0252 HDNOIP201304阻断传染

    HDNOIP201304阻断传染 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 H国有n个城市,n个城市用n ...

  8. java并发6-小结

    为什么需要并发   并发其实是一种解耦合的策略,它帮助我们把做什么(目标)和什么时候做(时机)分开.这样做可以明显改进应用程序的吞吐量(获得更多的CPU调度时间)和结构(程序有多个部分在协同工作).做 ...

  9. 用 O(1) 时间检测整数 n 是否是 2 的幂次。

    位操作 2的幂次数 2  10 4 100 8 1000 16 10000 ... 1 class Solution { 2 /* 3 * @param n: An integer 4 * @retu ...

  10. bfs 记录和打印最短路径

    Poj3984 迷宫问题 #include <iostream> #include <algorithm> #include <cstdio> #include & ...