.net mvc 构建easyui树形结构,EasyUI 的 Combotree 组件

2 篇文章 4 订阅

.net mvc 构建easyui树形结构

开发背景说明
前端:EasyUI 的 Combotree 组件
后端:.Net MVC

实现思路其实就是递归,几个foreach循环嵌套而已,就是循环根节点,然后循环根节点的根节点,然后再循环根节点的根节点的根节点,一直如此类推。。。。。。

前端

<div>
	<select  id="department" class="easyui-combobox"></select>
</div>
//绑定下拉框
$.ajax({
    url: "Department/GetDeptCombotreeData",
    type: "POST",
    dataType: "json",
    success: function (res) {
    	//这里就是最基础的显示,所以只给了data值,还有很多属性自行设置
    	//eval用来转换成json数组的,不然无法识别
    	$("#department").combotree({
            data: eval(res)
        });
    }
});

//赋值与取值
function submit(){
	//赋值
	$('#department').combotree('setValue', '值');
	//取值
	var selval = $('#department').combobox('getValue');
}

后端

/// <summary>
/// 构造树形Combox下拉框数据
/// </summary>
/// <param name="ParentList">根节点</param>
/// <param name="List">所有节点</param>
/// <returns></returns>
public static List<TreeObject> BindTree(List<TreeObject> ParentList, List<TreeObject> List)
{
	List<TreeObject> tree = new List<TreeObject>();
	foreach (var item in ParentList)
	{
		var data = BindTree2(ParentList, List, item.code);
        tree.Add(data);
    }
    return tree;
}
/// <summary>
/// 构造树形Combox下拉框数据2
/// </summary>
/// <param name="ParentList">根节点</param>
/// <param name="List">所有节点</param>
/// <param name="code">根节点id</param>
/// <returns></returns>
public static TreeObject BindTree2(List<TreeObject> ParentList, List<TreeObject> List, string code)
{
	//首先要有一个总节点,也就是ParentList,以这些总节点展开,延续后面的子节点,也就是List
	TreeObject node = ParentList.Where(t => t.code == code).FirstOrDefault();
	if (node != null)
	{
          //查询这个节点的所有子节点,
          List<TreeObject> childTreeNodes = List.Where(t => t.parentcode == code).ToList();
          //然后再次进循环,看当前的子节点是否还有子节点
          foreach (var child in childTreeNodes)
          {
               TreeObject n = BindTree2(List, List, child.code);
               //返回的对象为null就证明没有子子节点了,直接加上当前子节点
               if (n == null)
               {
                   node.children.Add(child);
               }
               //返回的对象不为null就证明当前节点的子节点还有子子节点,要加上带有子子节点的子节点
               else
               {
                   node.children.Add(n);
               }
           }
	}
	return node;
}

/// <summary>
/// 树形ComBox下拉框模型
/// </summary>
public class TreeObject
{
    public string id { get; set; }
    public string text { get; set; }
    public string parentid { get; set; }
    public List<TreeObject> children = new List<TreeObject>();
}

//使用
[HttpPost]
public ActionResult GetDeptCombotreeData()
{
    try
    {
        using (ManageContext db = new ManageContext())
        {
        	//拿到所有部门
            List<DeptInfo> AllDepts = db.DeptInfo.ToList();
            //获取最外层的根节点ID
            List<string> ParentList = new List<string>();
            foreach (var item in AllDepts) {
                //查出当前的id是否有父节点
                var cc = AllDepts.Where(x => x.Id == item.ParentId).FirstOrDefault();
                if (cc == null)
                {
                    ParentList.Add(item.Id);
                }
            }
            //构造最外层的根节点信息
            var ParentDeptAll = AllDepts.Where(s => ParentList.Contains(s.Id)).Select(x => new TreeObject
            {
                id = x.Id.ToString(),
                text = x.DeptName,
                parentid = x.ParentId
            }).ToList();
            //构建所有的节点信息
            var AllDeptList = AllDepts.Select(x => new TreeObject
            {
                id = x.Id.ToString(),
                text = x.DeptName,
                parentid = x.ParentId
            }).ToList();

            List<TreeObject> tree = BindTree(ParentDeptAll , AllDeptList );

            return Json(tree);
        }


    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值