需求: 最近做了一个项目,需要将数据库中的数据通过父子级的关系查出来,并且通过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 }
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 }
步骤二:将查出来的数据拼装成树形
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 }
2.3到这一步我们就转换完成了,下面是直接调用getAlarmNew()这个方法即可
context.Response.Write(getAlarmNew(startTime, endTime));
.net将数据库的数据通过父子级呈现,并通过json转换成树形
原文:https://www.cnblogs.com/yanhongnet/p/9244469.html