递归生成树对象,应用于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& ...
随机推荐
- 27 Java动态加载第三方jar包中的类
我加载的方法是://参数fileName是jar包的路径,processorName 是业务类的包名+类名public static A load(String fileName, String pr ...
- 关于keil单片机编程中的data,idata,xdata,pdata,code数据类型
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
- delphi列表视图组件(TListView)使用方法|实例
TListView 组件以多种形式显示列表的项目,如详细资料.小图标.大图标等形式表示列表中的项目. 列表视图与用TListBox 组件实现的列表框非常相似.不同的是,列表视图可以让用户选择不同 ...
- oracle 界面分页
/** * */ package org.pan.util; import java.sql.ResultSet; import java.sql.SQLException; import java. ...
- 不用修改nginx的高并发合并回源架构
nginx的连接都是一对一的,想改成一对多,比较麻烦,所以曾经看完了Nginx代码想改成一对多,我还是没改成,后来改变了一下思路想到一个更简单的方案,而且不失并发性能,还容易控制,下面先给出下面的图: ...
- 禁止多行文本框textarea拖拽
禁止多行文本框textarea拖拽: textarea { resize: none; } resize这个是用于元素缩放,它可以取以下几个值: none 默认值 both 允许水平方向及垂直方向缩放 ...
- Js打开网页后居中显示
使用JavaScript定义打开网页后居中显示,并可为窗口设置大小,使用“window.open”方法打开新窗口:先来看完整的代码及调用方法: <html xmlns="http:// ...
- shell脚本实现仅保留某目录下最新的两个文件
#!/bin/sh export DS_DIR=/home/cxy/test if [ ! -d $DS_DIR ]; then mkdir $DS_DIR else echo "$DS_D ...
- 基于.NET MVC的高性能IOC插件化架构(二)之插件加载原理
上一篇博文简单介绍了下插件化的代码组成部分:http://www.cnblogs.com/gengzhe/p/4390932.html,源码地址:https://github.com/luohuazh ...
- Drag & Drop and File Reader
参考 : http://www.html5rocks.com/zh/tutorials/file/dndfiles/ http://blog.csdn.net/rnzuozuo/article/det ...