Tree资源树的实战研究
Posted zealifree005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tree资源树的实战研究相关的知识,希望对你有一定的参考价值。
背景简介:
最近小编在做项目的时候,遇到了一个动态添加资源树的问题,经过几番实践,终于实现了最终的结果,下面我会将自己的经历一点点抛给大家,希望读者尽情享受这顿盛宴。这里,我们将实现如下图效果(功能介绍,通过选择年份显示左侧资源树,通过单击资源树在右侧表格中显示该指标中的档次信息):
一、自己动手js拼接树实践
html中就一句接收代码,Controller中将查询到的信息转换成json反到js中就可以了,这里主要是通过js控制树的一个拼接过程,如下代码:[javascript] view plain copy
- <span style="font-family:KaiTi_GB2312;font-size:18px;">-
- //通过年份查询定性指标,返回树-马康-2016-3-25 22:22:20
- function QueryUnitObjectByYearType()
- var nodeChild = document.getElementById("NodeChild");
- //获取下拉框中的年份
- var CheckYear = $('#CheckYear').combobox('getValue');
- //查询资源信息
- $.post("/SetQualitativeTargetLevel/QueryQualitativeTargetByYear?CheckYear=" + CheckYear, , function (data)
- //添加的时候先清除div中的数据
- $("#tree").empty();
- //将得到的集合按照指标类型去重放到res集合中
- var res = [];
- var json = ;
- for (var i = 0; i < data.length; i++)
- if (!json[data[i].DictionaryName])
- res.push(data[i].DictionaryName);
- json[data[i].DictionaryName] = 1;
- //遍历去重之后的集合,显示到树的div中
- $.each(res, function (i, item)
- if (item == "班子")
- $("#tree").append("<ul id='UnittreeTarget' ><li><span>" + item + "</span></li></ul>");
- else
- $("#tree").append("<ul id='CardrestreeTarget' ><li><span>" + item + "</span></li></ul>");
- );
- //遍历向div中添加查询到的指标信息
- $.each(data, function (i, item)
- if (item.DictionaryName == "班子")
- $("#UnittreeTarget").append("<ul><li><span>" + item.QualitativeTargetName + "</span></li></ul>");
- else
- $("#CardrestreeTarget").append("<ul><li><span>" + item.QualitativeTargetName + "</span></li></ul>");
- );
- );
- -</span>
最终实现的效果图如下(这里只是将资源以一个树的结构显示出来了,并没有实现单击查询的功能):
二、模仿老系统通过Controller中json转换拼接成树形结构的实战
这种方法HTML中也只有一句接收代码,js中就一句传递代码,主要代码在Controller中来实现的,代码如下:调用后台数据的方法:
[csharp] view plain copy
- <span style="font-family:KaiTi_GB2312;font-size:18px;">-
- #region QueryQualitativeTargetByYear 根据年份分页查询定性指标-马康-2016-3-4 0:17:45
- /// <summary>
- /// 根据年份分页查询定性指标-马康-2016-3-4 0:17:45
- /// </summary>
- /// <returns></returns>
- public string QueryQualitativeTargetByYear()
- //实例化返回数据的载体-AllQuantifyResultInputViewModel(实例化伟涛写的ViewModel)
- List<SetQualitativeTargetViewModel> SetQualitativeTargetViewModel = new List<SetQualitativeTargetViewModel>();
- //获取界面传过来的考核年份
- string CheckYear1 = Request["CheckYear"];
- //将考核年份转换为int类型
- int CheckYear = Convert.ToInt32(CheckYear1);
- //通过考核年份调用服务端查询定量考核指标名称的方法(调用伟涛写的查询方法)
- SetQualitativeTargetViewModel = ISetQualitativeTarget.QueryQualitativeTargetByYear1(CheckYear);
- //将查询到的集合按照类型ID排序
- var str = from p in SetQualitativeTargetViewModel orderby p.DictionaryID select p;
- //实例化一个datatable
- DataTable dtTreeInfo = new DataTable();
- //添加列头
- dtTreeInfo.Columns.Add("id");
- dtTreeInfo.Columns.Add("name");
- //定义变量
- string DictionaryName = "";
- foreach (var item in str)
- //判断去重
- if (DictionaryName != item.DictionaryName)
- //将不重复的值放到datatable中
- DictionaryName = item.DictionaryName;
- DataRow data = dtTreeInfo.NewRow();
- data["id"] = item.DictionaryID;
- data["name"] = item.DictionaryName;
- dtTreeInfo.Rows.Add(data);
- string strJson = getJson(dtTreeInfo, SetQualitativeTargetViewModel);
- //将查询到的数据转换为Json返回到界面上
- return strJson;
- #endregion
- -</span>
[csharp] view plain copy 二叉树的算法实战 symmetric-tree