当前位置: 首页 > news >正文

Asp.Net 2.0 TreeView的Checkbox级联操作

今天使用ASP.NET 2.0 的TreeView控件,要求每个节点都有CheckBox框,在选择父节点时,其下的全部子节点也选中。能过网络查询,再经过自己的分析修改,终于完成。现在测试用例,及所有JS文件分享。

直接在TreeView的属性上加入:OnClick="OnTreeNodeChecked(this)"

测试页面 test.aspx<html> <head runat="server"> <title>无标题页</title> <mce:script language="javascript" src="TreeView.js" mce_src="TreeView.js"></mce:script> <mce:script language =javascript type="text/javascript"><!-- function OnTreeNodeChecked() { var element = element = window.event.srcElement; if (!IsCheckBox(element)) return; var isChecked = element.checked; var tree = TV2_GetTreeById("TreeView1"); var node = TV2_GetNode(tree,element); TV2_SetChildNodesCheckStatus(node,isChecked); var parent = TV2_GetParentNode(tree,node); TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked); } // --></mce:script> </head> <body > <form id="form1" runat="server"> <div> <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" OnClick="OnTreeNodeChecked(this)" > <Nodes> <asp:TreeNode Text="新建节点" Value="新建节点"> <asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode> <asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode> </asp:TreeNode> <asp:TreeNode Text="新建节点" Value="新建节点"> <asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode> <asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode> </asp:TreeNode> <asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode> </Nodes> </asp:TreeView> </div> </form> </body> </html>

以下是完成级联选择的情况,脚本如下:

// TreeView.JS文件 /*************************************************************************************** Name: Client Javascript for ASP.NET 2.0 TreeView Description: ASP.NET 2.0 TreeView lack for client operation. This set of functions provide some supports. Includes: * get node * change checkbox status of parent and child nodes Author: Hebaokui Date: 2009-04-14 Commonts: ***************************************************************************************/ //set child nodes checkbox status function TV2_SetChildNodesCheckStatus(node,isChecked) { var childNodes = TV2i_GetChildNodesDiv(node); if(childNodes == null) return; var inputs = WebForm_GetElementsByTagName(childNodes,"INPUT"); if(inputs == null || inputs.length == 0) return; for(var i = 0; i < inputs.length; i++) { if(IsCheckBox(inputs[i])) inputs[i].checked = isChecked; } } //change parent node checkbox status after child node changed function TV2_NodeOnChildNodeCheckedChanged(tree,node,isChecked) { if(node == null) return; var childNodes = TV2_GetChildNodes(tree,node); if(childNodes == null || childNodes.length == 0) return; var isAllSame = true; for(var i = 0; i < childNodes.length; i++) { var item = childNodes[i]; var value = TV2_NodeGetChecked(item); if(isChecked != value) { isAllSame = false; break; } } var parent = TV2_GetParentNode(tree,node); if(isAllSame) { TV2_NodeSetChecked(node,isChecked); TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked); } else { TV2_NodeSetChecked(node,false); TV2_NodeOnChildNodeCheckedChanged(tree,parent,false); } } //get node relative element(etc. checkbox) function TV2_GetNode(tree,element) { var id = element.id.replace(tree.id,""); id = id.toLowerCase().replace(element.type,""); id = tree.id + id; var node = document.getElementById(id); if(node == null) //leaf node, no "A" node return element; return node; } //get parent node function TV2_GetParentNode(tree,node) { var div = WebForm_GetParentByTagName(node,"DIV"); //The structure of node: <table>information of node</table><div>child nodes</div> var table = div.previousSibling; if(table == null) return null; return TV2i_GetNodeInElement(tree,table); } //get child nodes array function TV2_GetChildNodes(tree,node) { if(TV2_NodeIsLeaf(node)) return null; var children = new Array(); var div = TV2i_GetChildNodesDiv(node); var index = 0; for(var i = 0; i < div.childNodes.length; i++) { var element = div.childNodes[i]; if(element.tagName != "TABLE") continue; var child = TV2i_GetNodeInElement(tree,element); if(child != null) children[index++] = child; } return children; } function TV2_NodeIsLeaf(node) { return !(node.tagName == "A"); //Todo } function TV2_NodeGetChecked(node) { var checkbox = TV2i_NodeGetCheckBox(node); return checkbox.checked; } function TV2_NodeSetChecked(node,isChecked) { var checkbox = TV2i_NodeGetCheckBox(node); if(checkbox != null) checkbox.checked = isChecked; } function IsCheckBox(element) { if(element == null) return false; return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox"); } //get tree function TV2_GetTreeById(id) { return document.getElementById(id); } // //private mothods, with TV2i_ prefix // //get div contains child nodes function TV2i_GetChildNodesDiv(node) { if(TV2_NodeIsLeaf(node)) return null; var childNodsDivId = node.id + "Nodes"; return document.getElementById( childNodsDivId ); } //find node in element function TV2i_GetNodeInElement(tree,element) { var node = TV2i_GetNodeInElementA(tree,element); if(node == null) { node = TV2i_GetNodeInElementInput(tree,element); } return node; } //find "A" node function TV2i_GetNodeInElementA(tree,element) { var as = WebForm_GetElementsByTagName(element,"A"); if(as== null || as.length == 0) return null; var regexp = new RegExp("^" + tree.id + "n\\d+$"); for(var i = 0; i < as.length; i++) { if(as[i].id.match(regexp)) { return as[i]; } } return null; } //find "INPUT" node function TV2i_GetNodeInElementInput(tree,element) { var as = WebForm_GetElementsByTagName(element,"INPUT"); if(as== null || as.length == 0) return null; var regexp = new RegExp("^" + tree.id + "n\\d+"); for(var i = 0; i < as.length; i++) { if(as[i].id.match(regexp)) { return as[i]; } } return null; } //get checkbox of node function TV2i_NodeGetCheckBox(node) { if(IsCheckBox(node)) return node; var id = node.id + "CheckBox"; return document.getElementById(id); }

有时候在子节点选择后,其父级节点也需要被选中,代码如下:

/*************************************************************************************** Name: Client Javascript for ASP.NET 2.0 TreeView Description: ASP.NET 2.0 TreeView lack for client operation. This set of functions provide some supports. Includes: * get node * change checkbox status of parent and child nodes Author: Hebaokui Date: 2009-04-14 Commonts: ***************************************************************************************/ //set child nodes checkbox status function TV2_SetChildNodesCheckStatus(node, isChecked) { var childNodes = TV2i_GetChildNodesDiv(node); if (childNodes == null) return; var inputs = WebForm_GetElementsByTagName(childNodes, "INPUT"); if (inputs == null || inputs.length == 0) return; for (var i = 0; i < inputs.length; i++) { if (IsCheckBox(inputs[i])) inputs[i].checked = isChecked; } } //change parent node checkbox status after child node changed function TV2_NodeOnChildNodeCheckedChanged(tree, node, isChecked) { if (node == null) return; var childNodes = TV2_GetChildNodes(tree, node); if (childNodes == null || childNodes.length == 0) return; var isAllSame = true; for (var i = 0; i < childNodes.length; i++) { var item = childNodes[i]; var value = TV2_NodeGetChecked(item); if (isChecked != value) { isAllSame = false; break; } } var parent = TV2_GetParentNode(tree, node); if (isAllSame) { TV2_NodeSetChecked(node, isChecked); TV2_NodeOnChildNodeCheckedChanged(tree, parent, isChecked); } else { if(isChecked) { TV2_NodeSetChecked(node, true); TV2_NodeOnChildNodeCheckedChanged(tree, parent, true); } } } //get node relative element(etc. checkbox) function TV2_GetNode(tree, element) { var id = element.id.replace(tree.id, ""); id = id.toLowerCase().replace(element.type, ""); id = tree.id + id; var node = document.getElementById(id); if (node == null) //leaf node, no "A" node return element; return node; } //get parent node function TV2_GetParentNode(tree, node) { var div = WebForm_GetParentByTagName(node, "DIV"); //The structure of node: <table>information of node</table><div>child nodes</div> var table = div.previousSibling; if (table == null) return null; return TV2i_GetNodeInElement(tree, table); } //get child nodes array function TV2_GetChildNodes(tree, node) { if (TV2_NodeIsLeaf(node)) return null; var children = new Array(); var div = TV2i_GetChildNodesDiv(node); var index = 0; for (var i = 0; i < div.childNodes.length; i++) { var element = div.childNodes[i]; if (element.tagName != "TABLE") continue; var child = TV2i_GetNodeInElement(tree, element); if (child != null) children[index++] = child; } return children; } function TV2_NodeIsLeaf(node) { return !(node.tagName == "A"); //Todo } function TV2_NodeGetChecked(node) { var checkbox = TV2i_NodeGetCheckBox(node); return checkbox.checked; } function TV2_NodeSetChecked(node, isChecked) { var checkbox = TV2i_NodeGetCheckBox(node); if (checkbox != null) checkbox.checked = isChecked; } function IsCheckBox(element) { if (element == null) return false; return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox"); } //get tree function TV2_GetTreeById(id) { return document.getElementById(id); } // //private mothods, with TV2i_ prefix // //get div contains child nodes function TV2i_GetChildNodesDiv(node) { if (TV2_NodeIsLeaf(node)) return null; var childNodsDivId = node.id + "Nodes"; return document.getElementById(childNodsDivId); } //find node in element function TV2i_GetNodeInElement(tree, element) { var node = TV2i_GetNodeInElementA(tree, element); if (node == null) { node = TV2i_GetNodeInElementInput(tree, element); } return node; } //find "A" node function TV2i_GetNodeInElementA(tree, element) { var as = WebForm_GetElementsByTagName(element, "A"); if (as == null || as.length == 0) return null; var regexp = new RegExp("^" + tree.id + "n\\d+$"); for (var i = 0; i < as.length; i++) { if (as[i].id.match(regexp)) { return as[i]; } } return null; } //find "INPUT" node function TV2i_GetNodeInElementInput(tree, element) { var as = WebForm_GetElementsByTagName(element, "INPUT"); if (as == null || as.length == 0) return null; var regexp = new RegExp("^" + tree.id + "n\\d+"); for (var i = 0; i < as.length; i++) { if (as[i].id.match(regexp)) { return as[i]; } } return null; } //get checkbox of node function TV2i_NodeGetCheckBox(node) { if (IsCheckBox(node)) return node; var id = node.id + "CheckBox"; return document.getElementById(id); }

相关文章:

  • azure最佳实践系列1-自我修复的设计
  • Nebula3 RTTI 小技巧
  • azure 最佳实践 -- 保持冗余
  • Swift 3 打印功能
  • 还需要编写DAO代码吗?SQL+接口就足够了!(Part 1)
  • 百度关闭竞价排名部分功能,以提升用户体验
  • linux 更新nodejs到最新
  • 移动MM初探之一:苹果APP Store模式将不再赢利?
  • 七大热门商业智能产品(非开源)
  • azure 最佳实践 3--最小协同操作
  • linux-2.6.26内核中ARM中断实现详解(2)
  • azure 最佳实践4 --可水平扩展的设计
  • 开发即过程!立此纪念一个IT新名词的诞生
  • azure 最佳实践5--使用分区
  • asp.net Webapi登录azureAD并调用azure graph api
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Angular 响应式表单之下拉框
  • Apache Zeppelin在Apache Trafodion上的可视化
  • bootstrap创建登录注册页面
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • fetch 从初识到应用
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • js作用域和this的理解
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • REST架构的思考
  • 测试如何在敏捷团队中工作?
  • 今年的LC3大会没了?
  • 王永庆:技术创新改变教育未来
  • 一些关于Rust在2019年的思考
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​ArcGIS Pro 如何批量删除字段
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #微信小程序(布局、渲染层基础知识)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (正则)提取页面里的img标签
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)iOS字体
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (状压dp)uva 10817 Headmaster's Headache
  • .gitignore文件---让git自动忽略指定文件
  • .Net 6.0 处理跨域的方式
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core中Emit的使用
  • .Net Memory Profiler的使用举例
  • .Net mvc总结
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net中应用SQL缓存(实例使用)
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录