专栏首页令仔很忙EasyUI----DataTable转拼EasyUI Tree

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 条评论
登录 后参与评论

相关文章

  • 新手学Linux(二)----使用 Vagrant 打造跨平台开发环境(一)

    做Web开发少不了要在本地搭建好开发环境,虽然说目前各种脚本都有对应的Windows版,甚至是一键安装包,但很多时候和Windows环境的相性并不是那么好,各...

    令仔很忙
  • Mybatis深入了解(五)----动态SQL

    动态sql是mybatis的核心,主要是对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活的拼接、组装。

    令仔很忙
  • 面向对象编程实例

    上一篇博客主要是在理论上介绍面向对象编程,下面通过一个计算器的实例来学习面向对象的好处。

    令仔很忙
  • MVC RC2中关于HtmlHelper给DropDownList设置初始选中值的问题

    Asp.Net MVC RC2中Helper提供的DropDownList好象并不太好用,特别想给下拉框设置初始选中值的时候(可能我还没找到正确的方法) 小试了...

    菩提树下的杨过
  • Mysql5.7.19安装后错误日志中有警告

    说明: 例如我们可以通过 select * from tempdb.t into outfile '/home/mysql/t.txt'; 把tempdb.t ...

    用户5522200
  • 第十四届华中科技大学程序设计竞赛 C.Professional Manager(并查集操作)

           题目链接:https://www.nowcoder.com/acm/contest/106/C

    Ch_Zaqdt
  • Rafy 框架 - 执行SQL或存储过程

    有时候,开发者不想通过实体来操作数据库,而是希望通过 SQL 语句或存储过程来直接访问数据库。Rafy 也提供了一组 API 来方便实现这类需求。 IDbAcc...

    用户1172223
  • 万恶的剪贴板==》为存储而生

    近几天逆天经常大量复制粘贴一些图文信息,在某些特定的场合,图片都是无法直接粘贴进去的,就比如博客园的编辑器。 源码:https://github.com/dun...

    逸鹏
  • java之spring之spring整合hibernate

    4.在src下,编写 hibernate.cfg.xml ,并且在cn.vincent.vo下编写vo类的映射文件 User.hbm.xml

    Vincent-yuan
  • C++ 静态数据成员与静态成员函数

    在类中的数据成员或成员函数定义或声明前以static关键词开头,即构成静态数据成员与静态成员函数。 静态数据成员 1.静态数据成员的实现 class Time ...

    chaibubble

扫码关注云+社区

领取腾讯云代金券