递归生成树对象,应用于Easyui,Tree控件
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控件的更多相关文章
- easyui中tree控件添加自定义图标icon
来源于:http://blog.163.com/lintianhuanhai@126/blog/static/165587366201421704420256/ <!DOCTYPE html&g ...
- [转]easyui常用控件及样式API中文收藏
[转]easyui常用控件及样式收藏 2013-05-06 23:01 30612人阅读 评论(0) 收藏 举报 分类: java ee(5) 目录(?)[+] CSS类定义: div easyu ...
- webdynpro tree控件使用
1. 首先创建一个TREE控件 2. 在Tree下面创建一个TREE NODE TYPE ,node type 是可以继续展开的,而Item type是无法展开的. 3. 创建node.,下面 ...
- DWZ (JUI) 教程 tree 控件的选中事件
DWZ (JUI) 教程 tree 控件的选中事件 先简单说一下流程 第一步 当然是先定义好回调事件了 function checkCallback(json){ ........... ...... ...
- antd的Tree控件实现点击展开功能
antd 的 Tree 控件没有提供点击展开的功能,只能通过左边的三角形实现展开和收起,没办法只好自己实现这个功能. 先看效果 如图实现的是类似 Mac 文件目录形式的结构,有箭头代表是个文件夹,点击 ...
- ElementUI Tree控件在懒加载模式下的重新加载和模糊查询
之所以使用懒加载是为了提高性能,而且只有在懒加载模式下默认会给所有显示节点设置展开按钮.leaf也可以做到,但是要操作数据比较麻烦. 要实现懒加载模式下的模糊查询以及重新加载必须要使用data与laz ...
- 疑似easyui本身bug:easyui时间控件问题,试了几个版本都不行
最近发现easyui时间控件的值格式不支持带斜杠的日期(2016/10/31),必须是2016-10-31这类的才能正常使用,否则默认初始化为当前时间 <input id="Retur ...
- 验证控件插图扩展控件ValidatorCalloutExtender(用于扩展验证控件)和TextBoxWatermarkExtender
<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptMan ...
- EasyUI常用控件禁用方法
EasyUI常用控件禁用方法: 1.validatebox可以用的用法:前两种适用于单个的validatebox; 第三种应用于整个form里面的输入框; <1>.$("#id& ...
随机推荐
- STL删除vector或list的方法及注意的问题
删除vector中的元素 1.删除指定的所有对象 STL中remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除.若要真正移除,需要搭配使用erase().例子: vector ...
- javascript触发input-file的click事件
概述 input:file本身自带的样式不太好看,但是又没法设置样式. 由于系统限制,不能通过代码触发,只允许用户自主点击. 通常的解决办法是,把input:file透明化,实际上点击的还是input ...
- 使用 phpMyAdmin无法登录mysql的问题
今天使用使用phpmyadmin时出现了以下错误: (1)第一次时: 当配置文件config.inc.php里的配置项是: $cfg['Servers'][$i]['host'] = 'localho ...
- 高级应用与部署 —— 主程序与web目录分离
在网站部署中,考虑网站的安全行问题,可以将您的网站主程序与web目录分离,使主程序在web目录之外,从而提高网站的安全性. 分离方法 1.将phpcms v9中程序主框架目录phpcms移动至web目 ...
- 线性表链式存储方式的C语言实现
/* 编译器:Dev-c++ 5.1.0 文件名:linkList3.cpp 代码版本号:1.0 时间:2015年9月24日11:34:16 */ #include <stdio.h> # ...
- 转:为什么需要htons(), ntohl(), ntohs(),htons() 函数
为什么需要htons(), ntohl(), ntohs(),htons() 函数: 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl ...
- COJ 0252 HDNOIP201304阻断传染
HDNOIP201304阻断传染 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 H国有n个城市,n个城市用n ...
- java并发6-小结
为什么需要并发 并发其实是一种解耦合的策略,它帮助我们把做什么(目标)和什么时候做(时机)分开.这样做可以明显改进应用程序的吞吐量(获得更多的CPU调度时间)和结构(程序有多个部分在协同工作).做 ...
- 用 O(1) 时间检测整数 n 是否是 2 的幂次。
位操作 2的幂次数 2 10 4 100 8 1000 16 10000 ... 1 class Solution { 2 /* 3 * @param n: An integer 4 * @retu ...
- bfs 记录和打印最短路径
Poj3984 迷宫问题 #include <iostream> #include <algorithm> #include <cstdio> #include & ...