TreeView的节点前的复选框选中问题, 大家都知道,TreeView实际上是有一个属性,设置为parent或者all等,是可以让treeview接点的前面加上一个复选框的,但是这个复选框,我却找不到它任何的事件,我想实现的功能是,选中父节点的复选框的同时,让其子节点的复选框也同时选中。注意:是选中复选框,不是选中节点。请高手指教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般是用js来实现的搜索关键字:asp.net TreeView 全选 private void CheckNodes(TreeNode checkRoot) { foreach (TreeNode tn in checkRoot.Nodes) { tn.Checked = checkRoot.Checked; } }JS级联选择http://topic.csdn.net/u/20080106/21/beed49b8-09d0-43aa-9ecf-faa9fd49739f.html 忘了说了,不用JS,实现效果,用ASP.NET,在服务端实现。 不是,关键是,这个生成的网页里根本就找不到复选框,也就是没有这个dom对象,怎么实现啊,服务端更是看不见这个复选框的代码痕迹,这就是这个控件的奇怪之处,它只让选中,却不让级联,而头又让我们实现级联。这就难了,所以请大家看看。 在后台个你的那个treeview加上一个属性TreeView1.Attributes.Add("onClick", "OnCheckEvent()");js代码是://checkbox点击事件 function OnCheckEvent() { var objNode = event.srcElement; if(objNode.tagName != "INPUT" || objNode.type != "checkbox") return; //获得当前树结点 var ck_ID = objNode.getAttribute("ID"); var node_ID = ck_ID.substring(0,ck_ID.indexOf("CheckBox")) + "Nodes"; var curTreeNode = document.getElementById(node_ID); //级联选择 SetChildCheckBox(curTreeNode,objNode.checked); SetParentCheckBox(objNode); } //子结点字符串 var childIds = ""; //获取子结点ID数组 function GetChildIdArray(parentNode) { if (parentNode == null) return; var childNodes = parentNode.children; var count = childNodes.length; for(var i = 0;i < count;i ++) { var tmpNode = childNodes[i]; if(tmpNode.tagName == "INPUT" && tmpNode.type == "checkbox") { childIds = tmpNode.id + ":" + childIds; } GetChildIdArray(tmpNode); } } //设置子结点的checkbox function SetChildCheckBox(parentNode,checked) { if(parentNode == null) return; var childNodes = parentNode.children; var count = childNodes.length; for(var i = 0;i < count;i ++) { var tmpNode = childNodes[i]; if(tmpNode.tagName == "INPUT" && tmpNode.type == "checkbox") { tmpNode.checked = checked; } SetChildCheckBox(tmpNode,checked); } } //设置父结点的checkbox function SetParentCheckBox(childNode) { if(childNode == null) return; var parent = childNode.parentNode; if(parent == null || parent == "undefined") return; do { parent = parent.parentNode; } while (parent && parent.tagName != "DIV"); if(parent == "undefined" || parent == null) return; var parentId = parent.getAttribute("ID"); var objParent = document.getElementById(parentId); childIds = ""; GetChildIdArray(objParent); //判断子结点状态 childIds = childIds.substring(0,childIds.length - 1); var aryChild = childIds.split(":"); var result = false; //当子结点的checkbox状态有一个为false,其父结点包括祖先的checkbox状态为false var =0; for(var i in aryChild) { var childCk = document.getElementById(aryChild[i]); if(childCk.checked) ++; } if(==aryChild.length) result=true; parentId = parentId.replace("Nodes","CheckBox"); var parentCk = document.getElementById(parentId); if(parentCk == null) return; if(result) parentCk.checked = true; else parentCk.checked = false; SetParentCheckBox(parentCk); } ajax问题,无法获取数据 大虾告诉下缓存依赖的缺点是什么?什么地方用不合适?只讨论缺点 大伙评评,我这算是高效分页吗? 找VS2005 ASP.NET 表格控件 使用OWC11的问题 C# 文件夹的创建 怎么样把下面这段代码的页面居中显示啊? 又一个小小问题! ewebeditor的焦点问题,高手救助! ASP 文本域内容赋值给隐藏域问题~ 怎样实现两个母版页的动态切换。请指教。 母版页如何嵌套一个母版页,高手指教。
{
foreach (TreeNode tn in checkRoot.Nodes)
{
tn.Checked = checkRoot.Checked;
}
}
JS级联选择
http://topic.csdn.net/u/20080106/21/beed49b8-09d0-43aa-9ecf-faa9fd49739f.html
js代码是:
//checkbox点击事件
function OnCheckEvent()
{
var objNode = event.srcElement;
if(objNode.tagName != "INPUT" || objNode.type != "checkbox")
return;
//获得当前树结点
var ck_ID = objNode.getAttribute("ID");
var node_ID = ck_ID.substring(0,ck_ID.indexOf("CheckBox")) + "Nodes";
var curTreeNode = document.getElementById(node_ID);
//级联选择
SetChildCheckBox(curTreeNode,objNode.checked);
SetParentCheckBox(objNode);
}
//子结点字符串
var childIds = "";
//获取子结点ID数组
function GetChildIdArray(parentNode)
{
if (parentNode == null)
return;
var childNodes = parentNode.children;
var count = childNodes.length;
for(var i = 0;i < count;i ++)
{
var tmpNode = childNodes[i];
if(tmpNode.tagName == "INPUT" && tmpNode.type == "checkbox")
{
childIds = tmpNode.id + ":" + childIds;
}
GetChildIdArray(tmpNode);
}
}
//设置子结点的checkbox
function SetChildCheckBox(parentNode,checked)
{
if(parentNode == null)
return;
var childNodes = parentNode.children;
var count = childNodes.length;
for(var i = 0;i < count;i ++)
{
var tmpNode = childNodes[i];
if(tmpNode.tagName == "INPUT" && tmpNode.type == "checkbox")
{
tmpNode.checked = checked;
}
SetChildCheckBox(tmpNode,checked);
}
}
//设置父结点的checkbox
function SetParentCheckBox(childNode)
{
if(childNode == null)
return;
var parent = childNode.parentNode;
if(parent == null || parent == "undefined")
return;
do
{
parent = parent.parentNode;
}
while (parent && parent.tagName != "DIV");
if(parent == "undefined" || parent == null)
return;
var parentId = parent.getAttribute("ID");
var objParent = document.getElementById(parentId);
childIds = "";
GetChildIdArray(objParent);
//判断子结点状态
childIds = childIds.substring(0,childIds.length - 1);
var aryChild = childIds.split(":");
var result = false;
//当子结点的checkbox状态有一个为false,其父结点包括祖先的checkbox状态为false
var =0;
for(var i in aryChild)
{
var childCk = document.getElementById(aryChild[i]);
if(childCk.checked)
++;
}
if(==aryChild.length)
result=true;
parentId = parentId.replace("Nodes","CheckBox");
var parentCk = document.getElementById(parentId);
if(parentCk == null)
return;
if(result)
parentCk.checked = true;
else
parentCk.checked = false;
SetParentCheckBox(parentCk);
}