EasyUI----DataTable转拼EasyUI Tree

在做系统的时候,有一些组织机构类的关系,成树状结构,前台用的是EasyUI,由于涉及到多张表的数据,想要动态的拼接出一个树状的组织结构,后台传过来的是DataTable。

        /// <summary>
        /// DataTable转EasyUiTree的Json格式 
        /// </summary>
        /// <param name="dt">要转化的表</param>
        /// <param name="pField">父节点对应字段</param>
        /// <param name="pValue">父节点的值,默认为"0"</param>
        /// <param name="idField">ID对应的字段</param>
        /// <param name="nameField">Name对应的字段</param>
        /// <param name="isParentField">是否是父节点对应的字段</param>
        /// <param name="isChooseParentNode">是否选择父节点,有单选框、复选框的时候用;true:checkbox radio 可以选择父节点/子节点;false:radio 只能选择叶子节点</param>
        /// <returns></returns> 
        public static string DataTableToJsonElecViewTree(DataTable dt)
        {
            StringBuilder sb = new StringBuilder();
            string filter = string.Format("{0}='{1}'", "system_id", 0);   //获取顶级目录
            DataRow[] drs = dt.Select(filter);
            if (drs.Length < 1 )
            {
                return "";
            }
            sb.Append("[");
            //拼接显示到前台
            foreach (DataRow item in drs)
            {
                sb.Append("{");
                sb.AppendFormat("\"id\":\"{0}\",", item["system_id"].ToString());
                sb.AppendFormat("\"text\":\"{0}\"", item["system_name"].ToString());

                //获取children节点数据
                string filterDoor = string.Format("{0}='{1}'", "system_id", 2);
                DataRow[] drDoor = dt.Select(filterDoor);
                string systemid = drDoor[0]["system_id"].ToString();
                DoorGuardSystemBLL doorGuardSystemBLL = new DoorGuardSystemBLL();
                DataTable dtDoor = doorGuardSystemBLL.GetSystemDomain(int.Parse(systemid));
                //拼接到父节点下
                if (dtDoor.Rows.Count < 1)
                {
                    return "";
                }
                else
                {
                    sb.Append(",\"children\":[");
                    foreach (DataRow itemSon in dtDoor.Rows)
                    {
                        sb.Append("{");
                        sb.AppendFormat("\"id\":\"{0}\",", itemSon["domain_id"].ToString());
                        sb.AppendFormat("\"text\":\"{0}\"", itemSon["domain_name"].ToString());
                        sb.Append("},");
                    }
                    if (sb.ToString().EndsWith(","))
                    {
                        sb.Remove(sb.Length - 1, 1);
                    }
                    sb.Append("]");
                }
                sb.Append("},");
            }


            if (sb.ToString().EndsWith(","))
            {
                sb.Remove(sb.Length - 1, 1);
            }
            sb.Append("]");
            return sb.ToString();

        }

拼接Tree的时候,一定要注意一些标点的东西,错了的话他也不会给提示,但也不显示数据,考验细心的地方。

刚开始拼的时候,一点头绪都没有,在网上搜的赶脚有点复杂,看不懂,然后自己就一级一级的往下拼,虽然说现在的循环有点多,而且这只是两层的结构,但是自己摸索出来的东西就是有成就感,以后再优化,先这么用着。大家也可以试试!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值