现在的位置: 首页 > 综合 > 正文

TreeView如何实现全选

2013年09月06日 ⁄ 综合 ⁄ 共 4008字 ⁄ 字号 评论关闭

下面有两种办法,是我从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"   onclick='client_OnTreeNodeChecked()' >
</asp:TreeView>
两种方法我都试了,完全可以做到!
另,有位朋友用C#做了个自定义控件,是TreeView 的,有人感兴趣的话,就留言给我吧,我可以发源程序!

抱歉!评论已关闭.