下面有两种办法,是我从CSDN里找到的,拿来共享下
法一:
用JS我实现了的,没什么问题。记得在Page_load时间写
this.TreeView1.Attributes.Add("onclick", "CheckEvent()");
JScript code
//获取元素指定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);
}
}
法二:
// 全选TreeView
function client_OnTreeNodeChecked()
{
var obj = window.event.srcElement;
var treeNodeFound = false ;
var checkedState;
if (obj.tagName == " INPUT " && obj.type == " checkbox " )
{
var treeNode = obj;
checkedState = treeNode.checked;
do
{
obj = obj.parentElement;
} while (obj.tagName != " TABLE " )
var parentTreeLevel = obj.rows[ 0 ].cells.length;
var parentTreeNode = obj.rows[ 0 ].cells[ 0 ];
var tables = obj.parentElement.getElementsByTagName( " TABLE " );
var numTables = tables.length
if (numTables >= 1 )
{
for (i = 0 ; i < numTables; i ++ )
{
if (tables[i] == obj)
{
treeNodeFound = true ;
i ++ ;
if (i == numTables)
{
return ;
}
}
if (treeNodeFound == true )
{
var childTreeLevel = tables[i].rows[ 0 ].cells.length;
if (childTreeLevel > parentTreeLevel)
{
var cell = tables[i].rows[ 0 ].cells[childTreeLevel - 1 ];
var inputs = cell.getElementsByTagName( " INPUT " );
inputs[ 0 ].checked = checkedState;
}
else
{
return ;
}
}
}
}
}
}
<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" ShowLines="True" οnclick='client_OnTreeNodeChecked()' >
</asp:TreeView>
两种方法我都试了,完全可以做到!
另,有位朋友用C#做了个自定义控件,是TreeView 的,有人感兴趣的话,就留言给我吧,我可以发源程序!