Tree资源树的实战研究

Posted zealifree005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tree资源树的实战研究相关的知识,希望对你有一定的参考价值。

背景简介:

    最近小编在做项目的时候,遇到了一个动态添加资源树的问题,经过几番实践,终于实现了最终的结果,下面我会将自己的经历一点点抛给大家,希望读者尽情享受这顿盛宴。
    这里,我们将实现如下图效果(功能介绍,通过选择年份显示左侧资源树,通过单击资源树在右侧表格中显示该指标中的档次信息):

一、自己动手js拼接树实践

    html中就一句接收代码,Controller中将查询到的信息转换成json反到js中就可以了,这里主要是通过js控制树的一个拼接过程,如下代码:
[javascript]  view plain  copy  
  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">-  
  2. //通过年份查询定性指标,返回树-马康-2016-3-25 22:22:20  
  3. function QueryUnitObjectByYearType()   
  4.     var nodeChild = document.getElementById("NodeChild");  
  5.     //获取下拉框中的年份  
  6.     var CheckYear = $('#CheckYear').combobox('getValue');  
  7.   
  8.     //查询资源信息  
  9.     $.post("/SetQualitativeTargetLevel/QueryQualitativeTargetByYear?CheckYear=" + CheckYear, , function (data)   
  10.         //添加的时候先清除div中的数据    
  11.         $("#tree").empty();  
  12.         //将得到的集合按照指标类型去重放到res集合中  
  13.         var res = [];  
  14.         var json = ;  
  15.         for (var i = 0; i < data.length; i++)   
  16.             if (!json[data[i].DictionaryName])   
  17.                 res.push(data[i].DictionaryName);  
  18.                 json[data[i].DictionaryName] = 1;  
  19.               
  20.           
  21.         //遍历去重之后的集合,显示到树的div中  
  22.         $.each(res, function (i, item)   
  23.             if (item == "班子")   
  24.                 $("#tree").append("<ul id='UnittreeTarget' ><li><span>" + item + "</span></li></ul>");  
  25.               
  26.             else   
  27.                 $("#tree").append("<ul id='CardrestreeTarget' ><li><span>" + item + "</span></li></ul>");  
  28.               
  29.         );  
  30.         //遍历向div中添加查询到的指标信息  
  31.         $.each(data, function (i, item)   
  32.             if (item.DictionaryName == "班子")   
  33.                 $("#UnittreeTarget").append("<ul><li><span>" + item.QualitativeTargetName + "</span></li></ul>");  
  34.               
  35.             else   
  36.                 $("#CardrestreeTarget").append("<ul><li><span>" + item.QualitativeTargetName + "</span></li></ul>");  
  37.               
  38.         );  
  39.     );  
  40.   
  41. -</span>  

    最终实现的效果图如下(这里只是将资源以一个树的结构显示出来了,并没有实现单击查询的功能):

二、模仿老系统通过Controller中json转换拼接成树形结构的实战

    这种方法HTML中也只有一句接收代码,js中就一句传递代码,主要代码在Controller中来实现的,代码如下:

    调用后台数据的方法:

[csharp]  view plain  copy  
  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">-  
  2. #region QueryQualitativeTargetByYear 根据年份分页查询定性指标-马康-2016-3-4 0:17:45  
  3.         /// <summary>  
  4.         /// 根据年份分页查询定性指标-马康-2016-3-4 0:17:45  
  5.         /// </summary>  
  6.         /// <returns></returns>  
  7.         public string QueryQualitativeTargetByYear()  
  8.           
  9.   
  10.             //实例化返回数据的载体-AllQuantifyResultInputViewModel(实例化伟涛写的ViewModel)  
  11.             List<SetQualitativeTargetViewModel> SetQualitativeTargetViewModel = new List<SetQualitativeTargetViewModel>();  
  12.   
  13.             //获取界面传过来的考核年份  
  14.             string CheckYear1 = Request["CheckYear"];  
  15.             //将考核年份转换为int类型  
  16.             int CheckYear = Convert.ToInt32(CheckYear1);  
  17.   
  18.   
  19.             //通过考核年份调用服务端查询定量考核指标名称的方法(调用伟涛写的查询方法)  
  20.             SetQualitativeTargetViewModel = ISetQualitativeTarget.QueryQualitativeTargetByYear1(CheckYear);  
  21.   
  22.             //将查询到的集合按照类型ID排序  
  23.             var str = from p in SetQualitativeTargetViewModel orderby p.DictionaryID select p;  
  24.   
  25.   
  26.             //实例化一个datatable  
  27.             DataTable dtTreeInfo = new DataTable();  
  28.   
  29.             //添加列头  
  30.             dtTreeInfo.Columns.Add("id");  
  31.             dtTreeInfo.Columns.Add("name");  
  32.             //定义变量  
  33.             string DictionaryName = "";  
  34.   
  35.             foreach (var item in str)  
  36.               
  37.                 //判断去重  
  38.                 if (DictionaryName != item.DictionaryName)  
  39.                   
  40.                     //将不重复的值放到datatable中  
  41.                     DictionaryName = item.DictionaryName;  
  42.                     DataRow data = dtTreeInfo.NewRow();  
  43.                     data["id"] = item.DictionaryID;  
  44.                     data["name"] = item.DictionaryName;  
  45.                     dtTreeInfo.Rows.Add(data);  
  46.                   
  47.               
  48.   
  49.             string strJson = getJson(dtTreeInfo, SetQualitativeTargetViewModel);  
  50.             //将查询到的数据转换为Json返回到界面上    
  51.             return strJson;  
  52.   
  53.           
  54.         #endregion  
  55. -</span>  
    转换树形js的方法:

[csharp]  view plain  copy 二叉树的算法实战 symmetric-tree

$Matrix-Tree$定理-题目

说一下B+tree和二叉搜索树的区别?说一下二叉搜索树和AVL树红黑树之间的差别

Tree数据结构

再探决策树算法之利用sklearn进行决策树实战

文献总结| 基于机器学习方法的地面PM2.5定量反演研究