关于TreeView连带选择的功能估计很多人都写过,如果用服务器端事件来写比较方便,但是多了一层服务器端交互,系统易用性也上不太好,所以还是把这些功能的处理放在客户端会好一些。

功能说明:

A、选中某节点后会默认选中其所有子节点和其所有父节点的CheckBox

B、取消选中某节点后会取消选中其所有子节点的CheckBox,如其父节点下尚有其他子节点被选中,则不取消父节点CheckBox,如没有,则取消选中所有父节点的CheckBox

简单写了些客户端代码,可以直接放到JS文件中使用,希望对大家能有帮助。
1、首先是服务器端加一段代码,进行客户脚本注册
this.TVMenus.Attributes.Add("onclick", "CheckEvent();");

2、其次是下面的客户端脚本,我把它直接放到一个专用的JS文件中

JavaScript
 1 //客户端捕捉事件
 2 function  CheckEvent() 
 3 { 
 4     var  objNode  =  event.srcElement; 
 5     if(objNode.tagName == "INPUT"  &&  objNode.type== "checkbox") 
 6     {
 7         var objParentDiv = objNode.id.replace("CheckBox","Nodes");
 8         if(objNode.checked==true) 
 9         { 
10             setChildCheckState(objParentDiv,true); 
11                     
12             setParentCheckeState(objNode,true); 
13         }
14         else 
15         {
16             setChildCheckState(objParentDiv,false);
17                    
18             if(!HasOtherChecked(objNode)){    
19                 setParentCheckeState(objNode,false); 
20             }
21         }
22     }
23 }
24 
25 //判断是否有并行的其他节点被选中
26 function HasOtherChecked(objNode)
27 {
28     var  objParentDiv  =  WebForm_GetParentByTagName(objNode, "div"); 
29     
30     var chks = objParentDiv.getElementsByTagName("INPUT");
31     for(var i=0;i<chks.length;i++){
32         if(chks[i].checked && chks[i].id != objNode.id)
33         {
34             return true;
35         }
36     }
37     return false;
38 }
39 
40 //设置父节点
41 function  setParentCheckeState(objNode,chkstate) 
42 {         
43     try{
44         var  objParentDiv  =  WebForm_GetParentByTagName(objNode, "div");         
45                 
46         if(objParentDiv == null  ||  objParentDiv  ==  "undefined "){ 
47                 return; 
48         } 
49         else{
50             var objParentChkId = objParentDiv.id.replace("Nodes","CheckBox");            
51             var objParentCheckBox = document.getElementById(objParentChkId);            
52             
53             if(objParentCheckBox){  
54                 objParentCheckBox.checked = chkstate;
55                 setParentCheckeState(objParentDiv,chkstate);
56             }
57         }
58      }
59      catch(e){}
60 } 
61 
62 //设置子节点
63 function  setChildCheckState(nodeid,chkstate) 
64 {  
65     var node = document.getElementById(nodeid);
66     
67     if(node){
68         var chks = node.getElementsByTagName("INPUT");
69         for(var i=0;i<chks.length;i++){
70             chks[i].checked = chkstate;
71         }
72     }
73 } 

ASP.NET 2.0实现自带TreeView的客户端连带选择相关推荐

  1. 如何将带Dxperience组件的Asp.net 2.0网站部署到服务器(转载)

    如何将Asp.net 2.0网站部署到服务器 .net 2.0较之于.net 1.1的一个改进就是开发web程序时没有了bin目录,对类库的引用自动放在web.config文件中.好处就是不用像以前那 ...

  2. 在ASP.NET 2.0中建立站点导航层次

    站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局.默认的站点导航提供程序是基于XML的,但是你 ...

  3. [转载] 使用 Web 标准生成 ASP.NET 2.0 Web 站点

    参考链接: 使用super访问Java祖父母的成员 Stephen WaltherSuperExpert.com 适用于: Microsoft ASP.NET 2.0 (Beta 2) Microso ...

  4. .NET2.0和microsoft新知识体系-ASP.NET 2.0新特性

    ASP.NET技术从1.0版本升级到1.1变化不是很大.然而,从ASP.NET 1.x升级到2.0,却不是件轻而易举的事情.ASP.NET 2.0技术增加了大量方便.实用的新特性.图1-1所示列举了A ...

  5. 在ASP.NET 2.0中使用样式、主题和皮肤

    ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme).接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉.通过改 ...

  6. ASP.NET 2.0 AJAX中Webservice调用方法示例

    ASP.NET 2.0 AJAX中能够在客户端js中很方便地调用服务器Webservice,以下为一些调用的示例.笔者安装的ASP.NET 2.0 AJAX 版本为AJAX November CTP. ...

  7. ASP.NET 2.0站点登录、导航与权限管理

    (一)登录 asp.net 2.0中,新增了许多新的功能和控件.其中,新增的登陆控件可谓使得WEB应用的设计更加得心应手.什么是登陆控件呢?就是我们平常在WEB应用中经常要用到的用户注册,登陆,忘记密 ...

  8. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  9. 创建符合标准的、有语意的HTML页面——ASP.NET 2.0 CSS Friendly Control Adapters 1.0发布...

    ASP.NET 2.0提供了非常多的Web开发中常用到的复杂控件,例如Menu.GridView.Login等.虽然这些控件使用方法极为简单,且功能异常强大,但若你查看一些由这些控件所生成的HTML代 ...

最新文章

  1. Windows 2008 R2_NLB网络负载均衡(图文详解)(转)
  2. 泛函分析1-线性空间
  3. 一文抽丝剥茧带你掌握复杂Gremlin查询的调试方法
  4. Oracle Form Builder
  5. java设置框架位置_怎样设置label的位置啊?求指导
  6. python nonlocal的用法_python global和nonlocal用法解析
  7. C#强制关闭Excel进程(通过COM使用Excel时)
  8. Unity读取内部、外部资源详解
  9. Linux环境下ATAPI MO的使用方法(转)
  10. 如何在PS中去除图片文字?两种简单方法轻松搞定!
  11. Hive on spark执行子查询报错code3
  12. 电脑出现蓝屏后自动重启是什么原因
  13. FTP显示文件的修改时间与实际时间不一致
  14. Control-Freec:检测拷贝数变异的神器
  15. 目标检测系列:高分辨率表示HRNetV1、HRNetV2/V2p
  16. 【高级微观经济学】利润最大化
  17. 地图与定位(一)定位服务
  18. 如何提高网站 Google 排名
  19. 用计算机模拟地球诞生,计算机模拟显示:地球生命或源自太空外星微生物
  20. 计算机毕业设计JAVA工资管理系统mybatis+源码+调试部署+系统+数据库+lw

热门文章

  1. signature=dff897e1da6b42a8e9483e18ff19fcde,Vídeo Institucional: Ingresse1
  2. android textview参差不齐,android textView 排版显示参差不齐的解决方法
  3. tf.keras.losses.MeanAbsoluteError 损失函数 示例
  4. Python通过http、url获取数据
  5. oracle-01031+linux,Linux下,“ORA-01031: insufficient privileges”的处理
  6. linux中硬链接文件,科学网—Linux:文件的符号链接和硬链接 - 刘洋洋的博文
  7. 关于ftp的说法错误的是_斯坦福教授:成长型思维的养成,只需要换个说法,思维是可以训练的!...
  8. 万字总结:学习MySQL优化原理,这一篇就够了!
  9. MySQL的btree索引和hash索引的区别
  10. chromium android分析,Chromium Android工程迁移编译过程