1. 程式人生 > >遞迴實現EasyUI中Tree的Json格式

遞迴實現EasyUI中Tree的Json格式

               

 

 最近在做學校的基礎系統的時候前臺需要樹形的組織結構,由於前臺的整體框架都用的是EasyUI,所以只能採用EasyUi中Tree的格式,可是麻煩的是,需要符合EasyUI中Tree的Json格式,我們先看一下,格式是如何的呢?

<span style="font-size:18px;">[{ "id":1, "text":"My Documents", "children":[{  "id":22,  "text":"Photos",  "state":"closed",  "children":[{   "id":111,   "text":"Friend"  },{   "id":112,   "text":"Wife"  },{   "id":113,   "text":"Company"  }] },{  "id":12,  "text":"Program Files",  "children":[{   "id":121,   "text":"Intel"  },{   "id":122,   "text":"Java",   "attributes":{    "p1":"Custom Attribute1",    "p2":"Custom Attribute2"   }  },{   "id":123,   "text":"Microsoft Office"  },{   "id":124,   "text":"Games",   "checked":true  }] },{  "id":13,  "text":"index.html" },{  "id":14,  "text":"about.html" },{  "id":15,  "text":"welcome.html" }]}]</span>


 第一次看了之後,由於沒有思路就給放棄了,就採取了Tree中的老大ZTree,可以問題接踵而至,它與前臺的EasyUi有時會發生衝突,沒辦法最後還是隻能採取EasyUi中Tree,仔細分析一下,貌似可以採用演算法中的遞迴來實現,於是乎小編就有了以下的解決思路。


1.先建立一個符合EasyUi中樹形格式的類

<span style="font-size:18px;">    /*  樹的節點類       id:節點id,對載入遠端資料很重要。       text:顯示在節點的文字。       state:節點狀態,'open' or 'closed',預設為'open'。當設定為'closed'時,擁有子節點的節點將會從遠端站點載入它們。       checked:表明節點是否被選擇。       children:子節點,必須用陣列定義。    */
    public class TreeNode    {        public string id { get; set; }  //節點的id值        public string text { get; set; }  //節點顯示的名稱        public string state { get
; set; }//節點的狀態        public bool Checked { get; set; }             public List<TreeNode> children { get; set; }  //集合屬性,可以儲存子節點    }</span>


2.把從後臺查出來的物件,轉換成為EasyUi中格式

<span style="font-size:18px;">#region 2.0 將當前組織 物件 轉成 樹節點物件 +TreeNode ToNode()        /// <summary>        /// 將當前組織 物件 轉成 樹節點物件        /// </summary>        /// <returns></returns>        public TreeNode ToNode()        {            TreeNode node = new TreeNode()            {                id = this.pid,                text = this.OrganizationName,                state = "open",                Checked = false,                           children = new List<TreeNode>()            };            return node;        }        #endregion</span>

3.第三步通過遞迴轉換好的樹形節點,來找到自己的子節點,然後放到自己預設的屬性中

<span style="font-size:18px;">   #region 2.0 將 組織集合 轉成 樹節點集合 +List<MODEL.EasyUIModel.TreeNode> ToTreeNodes(List<Ou_Permission> listPer)        /// <summary>        /// 將 組織集合 轉成 樹節點集合        /// </summary>        /// <param name="listPer"></param>        /// <returns></returns>        public static List<TreeNode> ToTreeNodes(List<Organization> listPer)        {            List<TreeNode> listNodes = new List<TreeNode>();            //生成 樹節點時,根據 pid=0的根節點 來生成            LoadTreeNode(listPer, listNodes, "0");            return listNodes;        }        #endregion        #region 3.0 遞迴組織集合 建立 樹節點集合        /// <summary>        /// 遞迴組織集合 建立 樹節點集合        /// </summary>        /// <param name="listPer">組織集合</param>        /// <param name="listNodes">節點集合</param>        /// <param name="pid">節點父id</param>        public static void LoadTreeNode(List<Organization> listPer, List<TreeNode> listNodes, string pid)        {            foreach (var permission in listPer)            {                //如果組織父id=引數                if (permission.pParent == pid)                {                    //將 組織轉成 樹節點                    TreeNode node = permission.ToNode();                    //將節點 加入到 樹節點集合                    listNodes.Add(node);                    //遞迴 為這個新建立的 樹節點找 子節點                    LoadTreeNode(listPer, node.children, node.id);                }            }        }        #endregion</span>


通過以上操作最終就返回了類似樹形結構的集合,只要在轉換為Json串就OK了,當然也可以採用strbuilder的形式來拼接,但是那樣操作起來有點太麻煩了,所以採取了遞迴的形式。




           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow