EasyUI tree读取sql server的表结构得到json格式

  本来项目需要一个tree的树结构,后来随便选择了一个easyUI tree开源框架,后来碰到一个问题,我是要从数据库递归出结构的,转成json的,怎么做?难道是递归了拼接StringBuilder?要是这样做就太傻了,当时也打算这么做。然后各种百度,博客园,QQ群去问,回答的也是五花八门,没人给我指点详细的,我只好自己琢磨了。

第一:递归数据库的表。

第二:序列化最后的递归结果。

这里是我的数据库的表:

                    

然后下面是代码:

这里需要建立一个实体类,类的属性跟数据库表的一样,只是多了一个泛型属性,是为了保存子对象,你想看,要是这个类的属性有:ID,Name,ParentID(数据库的字段一样)你怎么递归得到父子的关系的tree?所以就多一个字段,这个字段就是泛型,例如我下面声明的类叫:Tree,所以我的类里有4个属性:ID,Name,ParentID,item,因为在easyUI tree里面,它的json结构是这样的:

  [{ "id":"1" , "text":"文件夹" , "status":"open" , "children":

      [{ "id":"1" , "text":"文件夹" , "status":"open" , "children":null }]

  }]

所以多这个List<Tree>就是保存一个一模一样的子对象,这里我声明item为保存子对象。

1     public class Tree
2     {
3         public int ID;
4         public string Name;
5         public int ParentID;
6         public List<Tree> item;
7     }

这里就是我写的递归方法:

 1      /// <summary>
 2         ///  用于遍历数据库表中保存上下级关系的tree结构
 3         /// </summary>
 4         /// <param name="ParentID">父级ID</param>
 5         /// <param name="li">list对象</param>
 6         /// <returns></returns>
 7         protected List<Tree> Recursive(int ParentID,List<Tree> li)
 8         {
 9             DataSet ds_content = Sql.GetDaTa("SELECT * FROM tb_cm WHERE parentID=" + ParentID);
10             if (ds_content.Tables[0].Rows.Count > 0)//判断如果查询到的结果不为空,才去递归
11             {
12                 //DataSet ds_content = Sql.GetDaTa("SELECT * FROM tb_cm WHERE parentID=" + ParentID);//根据父id查询有没有子id
13                 for (int i = 0; i < ds_content.Tables[0].Rows.Count; i++)
14                 {
15                     List<Tree> lis = new List<Tree>();//声明一个泛型用于保存子对象,Tree是我自己建立的一个类,
16                     Tree t = new Tree();
17                     t.ID = int.Parse(ds_content.Tables[0].Rows[i][0].ToString());
18                     t.Name = ds_content.Tables[0].Rows[i][1].ToString();
19                     t.ParentID=int.Parse(ds_content.Tables[0].Rows[i][2].ToString());
20                     DataSet ds_HaveItem = Sql.GetDaTa("SELECT id FROM tb_cm WHERE parentID="+t.ID);//查询用于判断是否有子对象
21                     //三元运算符判断大于0代表有子对象,有就返回遍历,否则返回null
22                     t.item = ds_HaveItem.Tables[0].Rows.Count > 0 ? Recursive(t.ID, lis) : null;
23
24                     li.Add(t);
25                 }
26             }
27             return li;
28         }    

这里就是序列化,序列化就变成json格式,所以不需要sb.append("[{")这样的去拼接字符串:

1  protected void Page_Load(object sender, EventArgs e)
2         {
3             GridView1.DataSource = Sql.GetDaTa("select * from tb_cm");
4             GridView1.DataBind();
5
6             List<Tree> li = new List<Tree>();
7             Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(Recursive(0, li)));
8         }

这个Newtonsoft.Json.JsonConvert.SerializeObject()序列化是我去csdn看别人回答的时候提到这个,这个是别人封装了的东西,从github下载来的,下载好了放到项目里,在项目里的引用那里点击【添加引用】,然后选择【浏览】找到你的项目里的这个dll,然后就成这样了:

下面这个Sql是我自己建立的类,里面返回查询结果,你可以自己写吧,记得在这个类的最上面引用的地方输入:using System.Configuration;

 1     public class Sql
 2     {
 3         static string connstr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
 4
 5         static SqlConnection conn = new SqlConnection(connstr);
 6
 7         public static DataSet GetDaTa(string sql)
 8         {
 9             DataSet ds = new DataSet();
10             SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
11             sda.Fill(ds);
12
13             return ds;
14         }
15
16     }

配置文件:

然后就运行吧:

已经输出json格式的内容了,把它赋值到json在线编辑器看看如何?

嗯,一切正常,我就不做前台的了,你用的话自己在前台ajax请求到后台返回这个结果就行了。睡觉了,一下还要上班。。

时间: 2024-08-06 11:58:29

EasyUI tree读取sql server的表结构得到json格式的相关文章

SQL Server查看表结构及视图,适合开发者使用,简单易用

SELECT * FROM INFORMATION_SCHEMA.TABLES SELECT * FROM INFORMATION_SCHEMA.COLUMNS 查看执行结果 SQL Server查看表结构及视图,适合开发者使用,简单易用,布布扣,bubuko.com

Oracle与Sql Server复制表结构及数据

1.Oracle create table 新表名 AS SELECT * FROM 源表名 2.Sql Server SELECT * into 新表名 from 源表名 Oracle与Sql Server复制表结构及数据

SQL Server 修改表结构后无法保存的老问题

在修改表结构后无法保存,这是每次重装SQL Server后都会遇到的问题,好记性不如烂笔头,在这里记一下吧. 保存修改了的表结构时会提示“不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改"选项.” 截图如下: 解决办法也很简单,在Microsoft SQL Server Management Studio的菜单中选择“工具->选项->设计器”,把“阻止保存要求重新创建表的更改”这一项前面的对勾去掉就可以了.如

SQL Server修改表结构后批量更新所有视图

最近修改了数据库表结构,数据同步的时候出了问题,发现很多数据明明已经修改,但是通过视图筛选出来的还是原来的数据,所以怀疑应该是视图缓存了数据,在园子里找到下面的博文,在这里做个记录备忘. 原文链接:http://www.cnblogs.com/yashen/archive/2004/12/23/81000.html 我们在使用SqlServer时经常遇到这种情况,当修改某个表的结构后,相关的视图就不对了而导致程序错误,因此就有个下面这个存储过程. CREATE PROCEDURE Refresh

SQL Server 修改表结构

一.创建表 --直接定义主外键 create table wallet( ID varchar(36) primary key, Money decimal(18,2) not null, Name varchar(36) default '余额', Member_ID varchar(36) foreign key references Member(ID) unique ) --或最后定义主外键 create table wallets( ID varchar(36), Money deci

sql server 复制表结构

1:复制表结构及数据到新表 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from infoMian 2:备份表的一部分列(不写*而写出列的列表) select 列名1,列名2,列名3 into 目的数据库名.dbo.目的表名 from 原表名 select id,title,mtype,stype,author,tel,nr into infoMianTest2 from inf

SQL Server复制表结构和表数据生成新表的语句

参考:http://topic.csdn.net/t/20020621/09/820025.html SELECT   *   INTO   newTableName   FROM   oldTableName 此方法将把旧表的结构和数据同时copy生成新表,不过主键外键约束没有生成,需要手动设置.

sql server 修改表结构语法大全

1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 alter table table_name drop column column_name 3.修改字段类型 alter table table_name alter column column_name new_data_type 2.6.1. 增加字段 要增加一个字段,使用这条命令: alter table products add column description text;

获取SQL SERVER数据库表结构

select a.name, b.name + '('+ convert(varchar,a.length) + ')' + case a.isnullable when 1 then ' Null' else '' end as [type], '' as Pretty  from syscolumns a join systypes b on (a.xusertype = b.xusertype) where a.id = object_id('TableName') Order By a.