递归实现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

猜你喜欢

转载自blog.csdn.net/qq_43747119/article/details/86409208