ASP.NET Treeview控件中对Checkbox的联级选择
来源:互联网 发布:怎么评价张学良 知乎 编辑:程序博客网 时间:2024/05/22 04:27
/************************************************************************** ASP.NET 2.0 TreeView控件 客户端CheckBox Chanage事件,兼容IE,OPERA,FIREFOX 1. 每勾选一个节点就要遍历勾选它的所有子节点 setChildChecked 同时循环勾选父节点 setParentChecked2. 每取消勾选一个节点就要遍历取消它的所有子节点 setChildUnChecked 如果同级其他的节点都未勾选,则循环取消父节点 setParentUnChecked CheckBox的ID形如:TreeView1n1CheckBox 树ID+'n'+编号+'CheckBox' 编号从0开始, 它的所有子节点都会在ID为TreeView1n1Nodes的Div中.**************************************************************************///TreeView onclick触发事件function client_OnTreeNodeChecked(event){ //得到当前所Click的对象 var objNode; if(!public_IsObjectNull(event.srcElement)) { //IE objNode = event.srcElement; } else { //FF objNode = event.target; } //判断是否Click的CheckBox if(!public_IsCheckBox(objNode)) return; var objCheckBox = objNode; //根据CheckBox状态进行相应处理 if(objCheckBox.checked==true) { //递归选中父节点的CheckBox setParentChecked(objCheckBox); //递归选中所有的子节点 setChildChecked(objCheckBox); } else { //递归取消选中所有的子节点 setChildUnChecked(objCheckBox); //递归取消选中父节点(如果当前节点的所有其他同级节点也都未被选中). setParentUnChecked(objCheckBox); }}//判断对象是否为空function public_IsObjectNull(element){ if(element==null || element == "undefined") return true; else return false;}//判断对象是否为CheckBoxfunction public_IsCheckBox(element){ if(public_IsObjectNull(element)) return false; if(element.tagName!="INPUT" || element.type!="checkbox") return false; else return true;}//得到包含所有子节点的Node(Div对象)function public_CheckBox2Node(element){ var objID = element.getAttribute("ID"); objID = objID.substring(0,objID.indexOf("CheckBox")); return document.getElementById(objID+"Nodes");}//得到父节点的CheckBoxfunction public_Node2CheckBox(element){ var objID = element.getAttribute("ID"); objID = objID.substring(0,objID.indexOf("Nodes")); return document.getElementById(objID+"CheckBox");}//得到本节点所在的Node(Div对象)function public_GetParentNode(element) { var parent = element.parentNode; var upperTagName = "DIV"; //如果这个元素还不是想要的tag就继续上溯 while (parent && (parent.tagName.toUpperCase() != upperTagName)) { parent = parent.parentNode ? parent.parentNode : parent.parentElement; } return parent;}//设置节点的父节点Checkedfunction setParentChecked(currCheckBox){ var objParentNode= public_GetParentNode(currCheckBox); if(public_IsObjectNull(objParentNode)) return; var objParentCheckBox = public_Node2CheckBox(objParentNode); if(!public_IsCheckBox(objParentCheckBox)) return; objParentCheckBox.checked = true; setParentChecked(objParentCheckBox);}//当父节点的所有子节点都未被选中时,设置父节点UnCheckedfunction setParentUnChecked(currCheckBox){ var objParentNode= public_GetParentNode(currCheckBox); if(public_IsObjectNull(objParentNode)) return; //判断currCheckBox的同级节点是否都为UnChecked. if(!IsMyChildCheckBoxsUnChecked(objParentNode)) return; var objParentCheckBox = public_Node2CheckBox(objParentNode); if(!public_IsCheckBox(objParentCheckBox)) return; objParentCheckBox.checked = false; setParentUnChecked(objParentCheckBox);}//设置节点的子节点UnCheckedfunction setChildUnChecked(currObj){ var currNode; if(public_IsCheckBox(currObj)) { currNode = public_CheckBox2Node(currObj); if (public_IsObjectNull(currNode)) return; } else currNode = currObj; var currNodeChilds = currNode.childNodes; var count = currNodeChilds.length; for(var i=0;i<count;i++) { var childCheckBox = currNodeChilds[i]; if(public_IsCheckBox(childCheckBox)) { childCheckBox.checked = false; } setChildUnChecked(childCheckBox); }}//设置节点的子节点Checkedfunction setChildChecked(currObj){ var currNode; if(public_IsCheckBox(currObj)) { currNode = public_CheckBox2Node(currObj); if (public_IsObjectNull(currNode)) return; } else currNode = currObj; var currNodeChilds = currNode.childNodes; var count = currNodeChilds.length; for(var i=0;i<count;i++) { var childCheckBox = currNodeChilds[i]; if(public_IsCheckBox(childCheckBox)) { childCheckBox.checked = true; } setChildChecked(childCheckBox); }}//判断该节点的子节点是否都为UnCheckedfunction IsMyChildCheckBoxsUnChecked(currObj){ var retVal = true; var currNode; if(public_IsCheckBox(currObj) && currObj.checked == true) { return false; } else currNode = currObj; var currNodeChilds = currNode.childNodes; var count = currNodeChilds.length; for(var i=0;i<count;i++) { if (retVal == false) break; var childCheckBox = currNodeChilds[i]; if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true) { retVal = false; return retVal; } else retVal = IsMyChildCheckBoxsUnChecked1(childCheckBox); } return retVal;}
----------------------------
后台
tvProj.Attributes.Add("onclick", "client_OnTreeNodeChecked(event)");
=============================================
Asp.Net选择TreeView前面的复选框引起回发记得以前写过一个代码。需要在TreeView前面的复选框选中时触发后台事件,从而引起页面其他部分数据发生改变。当时记得好像TreeView前面的复选框的可以引发选中项改变事件,而在某项由选中变成不选中,或者由不选中变成选中时是不能触发后台事件的。下面把它记下来,希望以后再用到时会有所帮助1.在页面上需要设置TreeView父项和子项的、 Checked="True" 和ShowCheckBox="True"2.在绑定TreeVeiw时,给它添加onclick事件代码如下 TreeView1.Attributes.Add("onclick", "postBackByObject()");//添加点击事件注:postBackByObject是一个JavaScript函数具体代码如下 // 点击复选框时触发事件(此事件会引起回发) function postBackByObject() { var o = window.event.srcElement; if (o.tagName == "INPUT" && o.type == "checkbox") { __doPostBack("UpdatePanel1",""); //此处前面是两个下划线(UpdatePanel1处是因为用了UpdatePanel所以才写这个控件ID的) } }3.postBackByObject函数引发的回传最终是触发TreeNodeCheckChanged事件的。下面只贴代码。 /// <summary> /// 左边树形控件选择项改变 /// 判断是否选择,加入右边控件 /// </summary> protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { TreeNode node = TreeView1.SelectedNode; if (node != null && node.Parent != null) //选中节点不为空,非父节点。 { //添加或移除项 } else //点击的是复选框 { if (node.ChildNodes.Count > 0) //选中的是父节点的框 { SetChildChecked(node); //复选框事件 } else //选中的是子节点 { //添加或移除项 } } } /// <summary> /// 左边树形控件选择项改变 /// 判断是否选择,加入右边控件 /// </summary> protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) { SetChildChecked(e.Node); // 判断是否是根节点 if (e.Node.Parent != null) { e.Node.Parent.Checked = e.Node.Checked; AddSourceTable(e.Node); } } /// <summary> /// 根据父节点状态设置子节点的状态 /// </summary> /// <param name="parentNode"></param> private void SetChildChecked(TreeNode parentNode) { foreach (TreeNode node in parentNode.ChildNodes) { node.Checked = parentNode.Checked; .......... //添加或移除项 if (node.ChildNodes.Count > 0) { SetChildChecked(node); } } }
- ASP.NET Treeview控件中对Checkbox的联级选择
- asp.net 2.0 中 TreeView控件中的checkbox客户端操作
- asp.net 2.0 中 TreeView控件中的checkbox客户端操作
- ASP.NET中TreeView控件的使用方法
- TreeView&CheckBox(ASP.NET)
- asp.net treeview checkbox
- ASP.Net中的TreeView控件中对节点的上移和下移操作
- javacript实现TreeView中checkBox的选择
- 用JQuery实现对ASP.NET TreeView控件的级连选中
- ASP.NET中TreeView控件的安装及使用
- asp.net中TreeView控件的递归呈现方法
- 关于ASP.NET中TreeView控件的一些体会
- .NET中TreeView 的 CheckBox 应用
- asp.net 2.0中treeview控件实现无限级分类
- 在ASP.NET中应用TreeView控件
- ASP.NET中使用TreeView控件[系列]
- ASP.NET中TreeView控件使用小结
- ASP.NET中TreeView控件使用小结
- SPI抗干扰能力
- Android自动化测试初探(四): 模拟键盘鼠标事件(Socket+Instrumentation实现)
- 进程学习回顾---两次fork避免僵尸进程
- putty窗口解决中文乱码问题
- Tomcat域名虚拟主机配置
- ASP.NET Treeview控件中对Checkbox的联级选择
- BitVisor中外部中断的处理流程浅析
- 如何调查Windows Embedded CE上的Exception“凶手”(1)
- SQL STUFF函数 同一列值拼接 拼接字符串
- Jaxb2.0实现Java Object转换Xml转换Java Object.
- 命名空间
- Android判断一个Service是否运行 对服务的判断
- myeclipse插件介绍与下载
- 程序调试随笔