EasyUI combotree的使用

原文链接: http://www.cnblogs.com/xcsn/p/8795392.html

 

 

一、后台数据

1.定义ComboTree类

根据控件的属性来写

public partial class ComboTree
    {
        public string id { get; set; }

        public string text { get; set; }

        public string iconCls { get; set; }

        public string state { get; set; }

        public string parentid { get; set; }

        public string attributes { get; set; }

        public string children { get; set; }
 
    }

2.扩展ComboTree方法

public partial class ComboTree
    {
        public string GetTreeString(List<ComboTree> treeList)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("[");
            List<ComboTree> parenTrees = treeList.Where(q => q.parentid == "0").ToList();   //赋权限每个角色都必须有父节点的权限,否则一个都不输出了
            if (parenTrees.Count > 0)
            {
                foreach (var parentTree in parenTrees)
                {
                    sb.Append("{\"id\":\"" + parentTree.id + "\",\"text\":\"" + parentTree.text + "\",\"iconCls\":\"" + parentTree.iconCls + "\",\"children\":[");
                    sb.Append(GetChildString(treeList, parentTree.id));
                }
                sb.Remove(sb.Length - 1, 1);
                sb.Append("]");
            }
            else
            {
                sb.Append("]");
            }
            return sb.ToString();
        }

        public string GetComboTreeString(List<ComboTree> comboTrees)
        {
            string sb = "[";
            comboTrees.ForEach(f => sb += "{\"id\":\"" + f.id + "\",\"text\":\"" + f.text + "\",\"iconCls\":\"" + f.iconCls + "\"},");
            sb = sb.Trim(",".ToCharArray());
            sb += "]";
            return sb;
        }

        private string GetChildString(List<ComboTree> treeList, string parentId)
        {
            StringBuilder sb = new StringBuilder();
            List<ComboTree> childrenTrees = treeList.Where(q => q.parentid == parentId).ToList();
            if (childrenTrees.Count > 0)
            {
                foreach (var childrenTree in childrenTrees)
                {
                    List<ComboTree> childrens = treeList.Where(q => q.parentid == parentId).ToList();//childrenTreedt.Select(string.Format("parentid={0}", r_list[j]["id"].ToString())));
                    if (childrens.Count > 0)
                    {
                        sb.Append("{\"id\":\"" + childrenTree.id + "\",\"text\":\"" + childrenTree.text + "\",\"iconCls\":\"" + childrenTree.iconCls + "\",\"children\":[");
                        sb.Append(GetChildString(treeList, childrenTree.id));
                    }
                    else
                    {
                        sb.Append("{\"id\":\"" + childrenTree.id + "\",\"text\":\"" + childrenTree.text + "\",\"iconCls\":\"" + childrenTree.iconCls + "\",\"attributes\":{\"url\":\"" + childrenTree.attributes + "\"}},");
                    }
                }
                sb.Remove(sb.Length - 1, 1);
                sb.Append("]},");
            }
            else  //根节点下没有子节点
            {
                sb.Append("]},");  //跟上面if条件之外的字符串拼上
            }
            return sb.ToString();
        }
    }

3.MVC调用

public ActionResult GetTree()
{
    List<ComboTree> comboTrees = new List<ComboTree>();
    var list = new List<entity>();//获取列表数据
    list.ForEach(f => comboTrees.Add(new ComboTree() { id = f.Id, text = f.Name, parentid = f.ParentId }));
    string treeString = new ComboTree().GetTreeString(comboTrees);
    return Content(treeString);
}

二、前端运用

HTML

<label class="form_label">
    部门:
</label>
<input class="easyui-combotree" id="treeParentId" name="treeParentId" data-options="url: '/Home/GetTree',onLoadSuccess:onLoadSuccess,onBeforeSelect:onBeforeSelect,onSelect:onSelect,lines:true" style="width: 200px; height: 22px;" />

脚本

 function onLoadSuccess(node, data) {
        if (data && data.length>0) {
            $("#treeParentId").combotree('setValue', data[0].id);
        }
    }

function onSelect(record) {
  console.log(record);
  var id = record.id;
  var text = record.text;
}

 PS: 当远程数据加载成功时触发onLoadSuccess

ZeroArr为过滤数组,包含相同的id选项不能选中.

    function onBeforeSelect(node) {
        var isZero = false;
        ZeroArr.forEach(function (value, index) {
            //console.log(node.id + "======" + ZeroArr[index].Id);
            if (node.id === ZeroArr[index].Id) {
                isZero = true;
                return false;
            }
        });
        if (isZero) {
            $.msg_show("提示", "请选择下级节点");
            return false;
        }
    }

 PS: 在请求加载数据之前触发onBeforeLoad,返回 false 则取消加载动作

相关说明

combobox和combotree是combo的扩展,相关中文教程:

http://www.jeasyui.net/plugins/168.html  combo 

http://www.jeasyui.net/plugins/169.html  comboBox

http://www.jeasyui.net/plugins/170.html   comboTree

转载于:https://www.cnblogs.com/xcsn/p/8795392.html

猜你喜欢

转载自blog.csdn.net/weixin_30410999/article/details/94793685