遞迴實現EasyUI中Tree的Json格式
阿新 • • 發佈:2019-01-13
最近在做學校的基礎系統的時候前臺需要樹形的組織結構,由於前臺的整體框架都用的是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