EasyUI combotree的使用


 

 

一、后台數據

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM