.net将数据库的数据通过父子级呈现,并通过json转换成树形

需求: 最近做了一个项目,需要将数据库中的数据通过父子级的关系查出来,并且通过json转换成树形的结构,这里做一下记录。

  数据库中已经有了数据,只需要查出啦就行,数据结构如下:

  

我们需要实现的效果是通过json转换成树形结构,效果如下:

实现思路:

  我的实现思路是,先找出所有的父亲,并且把字段去重,通过 group by 父亲的字段,然后在通过父亲的字段找到儿子,我用的是循环操作,当然也可以用递归,这里演示的是循环操作。

步骤一:查出所有的父亲放到DataTable 中 然后传入父亲的名称,查找儿子

 1 /// <summary>
 2         /// 获取所有的父亲
 3         /// </summary>
 4         /// <returns></returns>
 5         public DataTable OltAlarmNew(DateTime startTime, DateTime endTime)
 6         {
 7             startTime = Convert.ToDateTime("2018-04-11");
 8             endTime = Convert.ToDateTime("2018-04-12");
 9 
10             DataTable table = new DataTable();
11             string sql = @" select eqp_label from  KP_Alarm_Socket where event_time>'{0}'and event_time<'{1}'  --当前告警
12              group by eqp_label";
13 
14             sql = string.Format(sql, startTime, endTime);
15             table = DbHelperSQL.GetTable(sql);
16             return table;
17 
18         }
View Code
 1   /// <summary>
 2         /// 通过父亲找到儿子
 3         /// </summary>
 4         /// <param name="startTime"></param>
 5         /// <param name="endTime"></param>
 6         /// <param name="oltName"></param>
 7         /// <returns></returns>
 8         public DataTable PonAlarmNew(DateTime startTime, DateTime endTime, string oltName)
 9         {
10             startTime = Convert.ToDateTime("2018-04-11");
11             endTime = Convert.ToDateTime("2018-04-12");
12 
13             DataTable table = new DataTable();
14             string sql = @"select ne_label from  KP_Alarm_Socket where eqp_label='{0}'
15               and event_time>'{1}'and event_time<'{2}'  --当前告警
16               ";
17 
18             sql = string.Format(sql, oltName, startTime, endTime);
19             table = DbHelperSQL.GetTable(sql);
20             return table;
21         } 
View Code

 步骤二:将查出来的数据拼装成树形

  2.1先创建一个树形的实体:

  
1  /// <summary>
2         /// 树形实体
3         /// </summary>
4         internal class TreeBean
5         {
6             public string Name { get; set; }
7             public List<TreeBean> subName { get; set; }
8             public bool attribute { get; set; }
9         }
树形实体

  2.2将查出来的数据循环放到树形菜单中,并且通过json转换即可

  

 1   private string getAlarmNew(DateTime startTime, DateTime endTime)
 2         {
 3             HomeAnalysisData homeAnalysis = new HomeAnalysisData();
 4             DataTable oltFaultDt = homeAnalysis.OltAlarmNew(startTime, endTime);//当前父亲集合
 5             string olt = "";
 6             TreeBean root = new TreeBean();
 7             root.Name = "root";//节点名称
 8             root.subName = new List<TreeBean>();
 9 
10             for (int i = 0; i < oltFaultDt.Rows.Count; i++)
11             {
12                 TreeBean sub1 = new TreeBean();
13                 olt = oltFaultDt.Rows[i]["eqp_label"].ToString();//父亲名称
14 
15                 sub1.Name = olt;//节点一
16                 sub1.attribute = true;
17                 sub1.subName = new List<TreeBean>();
18                 DataTable oltFaultDt2 = homeAnalysis.PonAlarmNew(startTime, endTime, olt);//通过父级找到子级
19 
20                 for (int j = 0; j < oltFaultDt2.Rows.Count; j++)
21                 {
22                     TreeBean sub2 = new TreeBean();
23                     string pon = oltFaultDt2.Rows[j]["ne_label"].ToString();
24                     //sub2.subName = new List<TreeBean>();
25                     sub2.Name = pon;
26                     sub2.attribute = false;
27                     sub1.subName.Add(sub2);//将节点二添加到节点一下面
28 
29                 }
30 
31                 root.subName.Add(sub1);//添加节点一
32 
33 
34             }
35 
36 
37 
38             return JsonConvert.SerializeObject(root);//Json转换
39         }
View Code

   2.3到这一步我们就转换完成了,下面是直接调用getAlarmNew()这个方法即可

    context.Response.Write(getAlarmNew(startTime, endTime));

猜你喜欢

转载自www.cnblogs.com/yanhongnet/p/9244469.html