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. A Linear Time Majority Vote Algorithm

    介绍一种算法,它可以在线性时间和常数空间内,在一个数组内找出出现次数超过一半的某个数字. 要解决这个问题并不难,可以使用排序或哈希,但是这两种算法都不能同时满足时间或空间的要求. 然而,该算法(A L ...

  2. 学习笔记之AJAX无刷新分页

    利用AJAX实现无刷新分页技术原理: 其主要是利用AJAX的异步处理机制,实现数据的异步传递,它隐藏了客户端向服务端请求数据的状态,在客户端表现为无刷新的显示状态. 实现分页的步骤: 1.客服端点击页 ...

  3. Thinkphp 连接数据库、查询、添加

    一.连接数据库配置及Model数据模型层 1. Thinkphp\conf\convertion.php中找到数据库设置部分,复制到自己的配置文件中,并添加好有关数据库的内容 JiaoWu\Home\ ...

  4. php empty和isset的区别

    通过一个例子来解释一下, $id = 0  empty($id) 的值是true isset($id) 也是true. empty 和isset 处理对象无外乎 未定义常量 .0 .空字符串 如果变量 ...

  5. PHP微信红包的算法实现探讨

    header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8 ...

  6. WebSQL实例记录

    <table id="content"> </table> <br> <input type="button" id= ...

  7. 《python基础教程》笔记之 其它语句1

    print 相关 print可以打印多个表达式,只要将它们用逗号隔开就好,结果中每个参数之间都会插入一个空格,使用+可以避免空格,如 >>> print 'age:',42age: ...

  8. Jasper_filter data_pass field data from main to sub to filter some data

    main report: 1 add variable <variable name="Variable_rule" class="java.lang.String ...

  9. CentOS安装MySQL问题汇总

    遇到的错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) denied for ...

  10. Android 把从网络获取的图片缓存到内存中

    1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...