TreeView相关,CheckBox的控制问题?

liyin_liu 2008-07-14 11:34:39
一个带checkbox的TreeView,要使得
只要一个子节点选中,则父节点自动选中;父节点选中,则字节点全部选中
另外如果增加一个全选的checkbox,勾中它,则树treeview的节点全部选中,反之则全部取消。
treeview为已经绑定的二级树,请问如何能实现这样的控制。
...全文
120 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinglecat 2008-07-15
  • 打赏
  • 举报
回复
Asp.Net 2.0 TreeView的Checkbox级联操作
http://www.cnblogs.com/itrust/archive/2006/04/03/365439.aspx

TreeView几个小技巧
http://www.cnblogs.com/Jinglecat/archive/2007/03/19/679313.html
fellowcheng 2008-07-14
  • 打赏
  • 举报
回复

function ShowCheckBox()
{
var ele = event.srcElement;
//单击节点上的CheckBox获取所有子节点
if(ele.type=='checkbox')
{
var childrenDivID = ele.id.replace('CheckBox','Nodes');
var div = document.getElementById(childrenDivID);
if(div!=null)
{
var checkBoxs = div.getElementsByTagName('INPUT');
for(var i=0;i<checkBoxs.length;i++)
{
if(checkBoxs[i].type=='checkbox')
{
checkBoxs[i].checked=ele.checked;
var ml=document.getElementById(checkBoxs[i].id).parentElement.parentElement.parentElement.getElementsByTagName("INPUT");
if(ml.length>1)
{
if(ele.checked)
{
SelectUser(ml[1].value,ml[1].title);
}
else
{
RemoveUser(ml[1].value,ml[1].title);
}
}
}
}
}
else
{
var ml=document.getElementById(ele.id).parentElement.parentElement.parentElement.getElementsByTagName("INPUT");
if(ele.checked)
SelectUser(ml[ml.length-1].value,ml[ml.length-1].title);
else
RemoveUser(ml[ml.length-1].value,ml[ml.length-1].title);
}
}
}
shoushii 2008-07-14
  • 打赏
  • 举报
回复
是否要页面回传?
如果是的话:
1、回传到服务器,获得叶子的父节点,递归选中。
2、遍历整个树,选中/取消

不回传:
1、JS,在客户端生成树的整个结构,选中某叶子节点,通过生成的结构,获得其父节点,递归到根节点。
2、简单遍历
格拉 2008-07-14
  • 打赏
  • 举报
回复
MARK!
yagebu1983 2008-07-14
  • 打赏
  • 举报
回复
都把js代码给贴出来了!!!
UP!!!
JeffChung 2008-07-14
  • 打赏
  • 举报
回复
以前写在博客上,给你翻出来了

这里使用asp.net2.0的TreeView控件结合JavaScript实现权限树的部分功能。
  假设权限树中有如下三条规则:
  1、该节点可以访问,则他的父节点也必能访问;
  2、该节点可以访问,则他的子节点也都能访问;
  3、该节点不可访问,则他的子节点也不能访问。

代码如下:

//获取元素指定tagName的父元素
function public_GetParentByTagName(element, tagName)
{
var parent = element.parentNode;
var upperTagName = tagName.toUpperCase();
//如果这个元素还不是想要的tag就继续上溯
while (parent && (parent.tagName.toUpperCase() != upperTagName))
{
parent = parent.parentNode ? parent.parentNode : parent.parentElement;
}
return parent;
}

//设置节点的父节点Cheched——该节点可访问,则他的父节点也必能访问
function setParentChecked(objNode)
{
var objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "undefined")
{
return;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Nodes"));
objID = objID+"CheckBox";
var objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "undefined")
{
return;
}
if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox")
return;
objParentCheckBox.checked = true;
setParentChecked(objParentCheckBox);
}

//设置节点的子节点uncheched——该节点不可访问,则他的子节点也不能访问
function setChildUnChecked(divID)
{
var objchild = divID.children;
var count = objchild.length;
for(var i=0;i<objchild.length;i++)
{
var tempObj = objchild[i];
if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")
{
tempObj.checked = false;
}
setChildUnChecked(tempObj);
}
}

//设置节点的子节点cheched——该节点可以访问,则他的子节点也都能访问
function setChildChecked(divID)
{
var objchild = divID.children;
var count = objchild.length;
for(var i=0;i<objchild.length;i++)
{
var tempObj = objchild[i];
if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")
{
tempObj.checked = true;
}
setChildChecked(tempObj);
}
}

//触发事件
function CheckEvent()
{

var objNode = event.srcElement;

if(objNode.tagName!="INPUT" || objNode.type!="checkbox")
return;

if(objNode.checked==true)
{
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodes");
if(objParentDiv==null || objParentDiv == "undefined")
{
return;
}
setChildChecked(objParentDiv);
}
else
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodes");
if(objParentDiv==null || objParentDiv == "undefined")
{
return;
}
setChildUnChecked(objParentDiv);
}
}


然后在page_load事件中将TreeView与js事件绑定上:
this.TreeView1.Attributes.Add("onclick", "CheckEvent()");

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧