Asp.net下拉树的实现过程
场景描述:某个公司有多个部门并且部门存在子部门,通过一个下拉框选取多个部门,但是如果某个部门的子部门被全部选择,则只取该部门,而忽略子部门。(叶子节点全被选中时,只取父节点)
知识点:ComboTree、一般处理程序、递归、Json
效果如图
数据库表设计:单位_主
节点类设计:
公共类单位{公共十进制id { get设置;}公共字符串文本{获取设置;}公共字符串状态{获取设置;}公共列表单元子级{获取设置;}公共单元(){这。children=new ListUnit();this.state=' open} }处理类设计:
公共类UnitComponent { executorcesklhelper SqlHelper=new executorcesklhelper();//数据库处理类public UnitParent GetUnit(){ Unit root Unit=new Unit();root unit . id=1000 root unit . text=' BO APIroot unit。children=GetUnitList(0);单位递归(根单位。儿童);返回rootUnit} ///摘要///递归查询部门////summary///param name=' units '/param private void unit recursive(ListUnit units){ foreach(var item in units){ item。children=GetUnitList(项。id);if (item.children!=空项目。孩子们。计数0){ item。状态='关闭';UnitRecursive(项。儿童);} } } ///摘要///通过parentID获取所有子部门////summary///param name=' ParentId '父id/param /返回返回单位集合/返回私有列表单元GetUnitList(十进制parentID){ list unit unit lst=new list unit();字符串sql=字符串。格式('从单位_主hh中选择hh.unit_id,hh.unit_name,其中hh.parent_id={0} ',父id);数据表dt=SqlHelper .execute datable(SQL);//返回数据表方法if (dt!=空dt .行数。计数0){ for(int I=0;我决定。行。计数;I){ Unit dtup=新单位(){ id=Convert .至t32(dt .行[I][' unit _ id ']),文本=dt .行[i]['unit_name'].ToString()};unitLst .add(dtup);} }返回unitLst}}下面,新建网应用程序-添加-一般处理程序,其中Java Script语言序列化程序你可以换为牛顿英尺来处理
公共无效进程请求(HttpContext上下文){ JavaScript Serializer js=new JavaScript Serializer();语境。响应。content type=' application/JSON ';UnitComponent uc=新同步用户.UnitComponent();定义变量单位加州大学.GetUnit();语境。响应。写('[' js .序列化(单位)']');}现在我们测试一下这个一般处理程序,如果像图片一样返回了结果说明正确:
好了,部门结构的数据准备好了,下开始写前台代码:
新建一个aspx页面,拖一个控件
asp3360文本框ID=' tbUnit ' runat=' server ' Width=' 280 px '/asp3360文本框引入相应的js,在脚本加入代码
$('#tbUnit ').combotree({ url:'/unit。ashx ' cascadechck : true,placeholder: '请选择部门,method: 'get ',required: true,multiple: true,onChange:函数(newValue,old value){ computeunit();},onLoadSuccess:函数(节点,数据){ } });
不知你有没有发现我选中的是应用管理服务中心、小波、科技三个节点,但是小波、科技是应用服务中心的叶子节点。需求要求,我们只需获取应用管理服务中心节点,不需要在获取小波、科技。
所有要通过射流研究…遍历树来获取我们想要的节点计算机单元方法是我们想要的。
思路为:递归获取被选的子节点,然后与所选的节点作差集,最后的得到的就是被选的节点(不包括全选的子节点)
函数computeunit(){ var arr=new Array();var selectstr=$('#tbUnit ').combotree('getValues ').toString();var select=selectstr.split(',');var t=$('#tbUnit ').组合树(“树”);//获取树对象var n=t . tree(' GetChecked ');//获取所选节点单位递归(t,n,arr);警报(减法(选择,arr ).join(',');} /*计算数组差集**返回结果数组*/函数减法(arr1,arr 2){ var RES=[];for(var I=0;长度;I){ var flag=true;for(var j=0;j arr2。长度;j){ if(arr 2[j]==arr 1[I]){ flag=false;} } if(flag){ RES . push(arr 1[I]);} }返回res} /*获取被选父节点的子项目**返回结果到达)里*/function unitrecursive(t,nodes,arr){ for(var I=0;我节点。长度;i ) { if(!t . tree(' ISraf ',节点[i].target)){ var nn=t . tree(' GetChildren ',nodes[i].目标);for(var j=0;长度;j ) { arr.push(nn[j]).id);} unitrecursive(t,nn,arr);} } }以上就是ASP .网实现下拉树(简易用户界面组合)的全部思路,希望对大家的学习有所帮助。
版权声明:Asp.net下拉树的实现过程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。