• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > Asp.net下拉树的实现过程

Asp.net下拉树的实现过程

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了asp.net,asp net培训,asp和asp.net的区别,零基础学asp.net,c#和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

场景描述:某个公司有多个部门并且部门存在子部门,通过一个下拉框选取多个部门,但是如果某个部门的子部门被全部选择,则只取该部门,而忽略子部门。(叶子节点全被选中时,只取父节点)

知识点:ComboTree、一般处理程序、递归、Json

效果如图

 

数据库表设计:unit_main

 

节点类设计:

 public class Unit
 {
 public decimal id { get; set; }
 public string text { get; set; }
 public string state { get; set; }
 public List<Unit> children { get; set; }
 public Unit ()
 {
 this.children = new List<Unit>();
 this.state = "open";
 }
 }
</div>


处理类设计:

public class UnitComponent
 {
 ExeceteOralceSqlHelper SqlHelper= new ExeceteOralceSqlHelper();//数据库处理类
 public UnitParent GetUnit()
 {
  Unit rootUnit = new Unit();
  rootUnit.id = 1000;
  rootUnit.text = "BO API";
  rootUnit.children = GetUnitList(0);
  UnitRecursive(rootUnit.children);
  return rootUnit;
 }

 /// <summary>
 /// 递归查询部门
 /// </summary>
 /// <param name="units"></param>
 private void UnitRecursive(List<Unit> units)
 {
  foreach (var item in units)
  {
  item.children = GetUnitList(item.id);
  if (item.children != null && item.children.Count > 0)
  {
   item.state = "closed";
   UnitRecursive(item.children);
  }
  }
 }

 /// <summary>
 /// 通过parentID获取所有子部门
 /// </summary>
 /// <param name="parentID">父id</param>
 /// <returns>返回Unit集合</returns>
 private List<Unit> GetUnitList(decimal parentID)
 {
  List<Unit> unitLst = new List<Unit>();
  string sql = string.Format("select hh.unit_id,hh.unit_name from unit_main hh where hh.parent_id={0}", parentID);
  DataTable dt = SqlHelper.ExecuteDataTable(sql);//返回DataTable方法
  if (dt != null && dt.Rows.Count > 0)
  {
  for (int i = 0; i < dt.Rows.Count; i++)
  {
   Unit dtup = new Unit()
   {
   id = Convert.ToInt32(dt.Rows[i]["unit_id"]),
   text = dt.Rows[i]["unit_name"].ToString()
   };
   unitLst.Add(dtup);
  }
  }
  return unitLst;
 }
}
</div>

下面,新建web应用程序-添加-一般处理程序,其中JavaScriptSerializer你可以换为NewtonSoft来处理

public void ProcessRequest(HttpContext context)
{
 JavaScriptSerializer js = new JavaScriptSerializer();
 context.Response.ContentType = "application/json";
 UnitComponent uc = new SynUser.UnitComponent();
 var unit = uc.GetUnit();
 context.Response.Write("[" + js.Serialize(unit) + "]");
}
</div>

现在我们测试一下这个一般处理程序,如果像图片一样返回了结果说明正确:

好了,部门结构的数据准备好了,下开始写前台代码:

新建一个aspx页面,拖一个控件

<asp:TextBox ID="tbUnit" runat="server" Width="280px"></asp:TextBox>
</div>

引入相应的js,在script加入代码

$('#tbUnit').combotree({
 url: , '/unit.ashx'
 cascadeCheck: true,
 placeholder: "请选择部门",
 method: 'get',
 required: true,
 multiple: true,
 onChange: function (newValue, oldValue) {
 computeunit();
 },
 onLoadSuccess: function (node, data) {
    
 }
});
</div>

 

不知你有没有发现我选中的是应用管理服务中心、xiaobo、tech三个节点,但是xiaobo、tech是应用服务中心的叶子节点。需求要求,我们只需获取应用管理服务中心节点,不需要在获取xiaobo、tech。

所有要通过js遍历tree来获取我们想要的节点,computerunit方法是我们想要的。

思路为:递归获取被选的子节点,然后与所选的节点作差集,最后的得到的就是被选的节点(不包括全选的子节点)

function computeunit() {
  var arr = new Array();
  var selectstr = $("#tbUnit").combotree("getValues").toString();
  var select = selectstr.split(",");
  var t = $('#tbUnit').combotree('tree'); // get the tree object
  var n = t.tree('getChecked'); // get selected node
  unitrecursive(t, n, arr);
  alert(subtraction(select, arr).join(","));
 }

 /*计算数组差集
 **返回结果数组
 */
 function subtraction(arr1, arr2) {
  var res = [];
  for (var i = 0; i < arr1.length; i++) {
  var flag = true;
  for (var j = 0; j < arr2.length; j++) {
   if (arr2[j] == arr1[i]) {
   flag = false;
   }
  }
  if (flag) {
   res.push(arr1[i]);
  }
  }
  return res;
 }

 /*获取被选父节点的子项目
 **返回结果arr里
 */
 function unitrecursive(t, nodes, arr) {
  for (var i = 0; i < nodes.length; i++) {
  if (!t.tree('isLeaf', nodes[i].target)) {
   var nn = t.tree('getChildren', nodes[i].target);
   for (var j = 0; j < nn.length; j++) {
   arr.push(nn[j].id);
   }
   unitrecursive(t, nn, arr);
  }
  }
 }

</div>

以上就是ASP.NET实现下拉树(Easy UI ComboTree)的全部思路,希望对大家的学习有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.net SignalR 应用并实现群聊功能 开源代码
  • asp.net动态更新
  • asp.net利用母版制作页脚效果
  • Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决
  • 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具(推荐)
  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
  • ASP.NET Core发送邮件的方法
  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)
  • ASP.NET MVC从视图传参到控制器的几种形式
  • Asp.net core WebApi 使用Swagger生成帮助页实例

相关文章

  • 2017-05-11DotNet OnPreRender(EventArgs e) 事件常用的方法
  • 2017-05-11asp.net ckeditor编辑器的使用方法
  • 2017-05-11asp.net调用飞信免费发短信(测试有效)
  • 2017-05-11asp.net 更改gridview pageSize的方法
  • 2018-08-20解决Win10无法安装.Net Framework 3.5提示错误代码0x800F081F
  • 2018-08-20ASP.NET Core静态文件使用教程(9)
  • 2017-05-11ASP.NET中为GridView添加删除提示框的方法
  • 2017-05-11asp.net中SqlCacheDependency缓存技术概述
  • 2018-08-20详解CentOS 7.4下如何部署Asp.Net Core结合consul
  • 2017-05-11asp.net下Repeater使用 AspNetPager分页控件

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • ASP.NET中页面之间传递值的几种方式整理
    • asp.net下获取Excel所有的工作表名称
    • 关闭子页面刷新父页面中部分控件数据的方法
    • 获取DataList控件的主键和索引实用图解
    • asp.net生成Excel并导出下载五种实现方法
    • 在应用程序级别之外使用注册为allowDefinition='MachineToApplication'的节是错误的
    • net.sf.json 双引号丢失
    • 把aspx页面伪装成静态html格式的实现代码
    • ASP.NET 网站开发中常用到的广告效果代码
    • ASP.NET页面优化 性能提升8倍的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有