递归生成树对象,应用于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& ...
随机推荐
- sql查询语句心得
1)where 有多个用in ,一个用= 2)自身链接 select A.Sno from S A,S B where A.Sname='a' AND A.City=B.City)) 3)外链接(同时 ...
- 高放的c++学习笔记之重载运算与类型转换
▲基本概念 (1)重载运算符是具有特殊名字的函数,它们的名字又operator和其后要定义的运算符号共同构成.. (2)对于一个运算符号来说它或者是类的成员,或者至少含有一个类类型的参数. (3)我们 ...
- SQL中删除同一字段中重复的值
/////////////////////目地:ZDJZ_DIS中 name字段有重复的值,删除重复的值 DELETE * FROM ZDJZ_DIS WHERE NAME IN (select NA ...
- DropdownList控件绑定数据源显示system.data.datarowview的问题
.net开发的时候经常需要用到在后台取数据再绑定到控件的问题,通常只需要连接数据库,从数据库取出数据,放到Dataset里面,然后再设置控件的DataSource为这个Dataset,然后再datab ...
- jquery判断滚动条到底
$(document).scroll(function(){ var dHeight = $(document).height(); var wHeight = $(window).height(); ...
- Azure构建PredictionIO和Spark的推荐引擎服务
Azure构建PredictionIO和Spark的推荐引擎服务 1. 在Azure构建Ubuntu 16.04虚拟机 假设前提条件您已有 Azure 帐号,登陆 Azure https://port ...
- 调试单片机内部扩展RAM
51单片机内部只有128字节的RAM(8051),而8052有256字节的RAM,低128字节RAM直接或间接寻址都可以,高128字节RAM与SRF特殊功能寄存器共用地址,SFR只能直接寻址,高128 ...
- 如何判断一个C++对象是否在堆上(通过GetProcessHeaps取得所有堆,然后与对象地址比较即可),附许多精彩评论
在帖子如何判断一个C++对象是否在堆栈上 中, 又有人提出如何判断一个C++对象是否在堆上. 其实我们可以参照那个帖子的方法类似实现,我们知道堆就是Heap,在windows上我们可以通过GetPro ...
- Android豆瓣图书查询Demo
原文出自:方杰| http://fangjie.info/?p=26 转载请注明出处 首先先看一下Demo预览效果吧,主要也就是两个Activity.涉及到的技术有zxing开源项目的使用,网络协议豆 ...
- vimrc 留备份
set encoding=UTF-8 "encode with UTF-8"set backspace=2set nusyn onset ai!syntax enablesynta ...