Asp.net 选中父节点时,treeview控件中的子节点将自动选中

Asp.net 选中父节点时,treeview控件中的子节点将自动选中,asp.net,Asp.net,我正在使用TreeView控件。使用复选框从数据库绑定值 几乎有三个子节点用于父节点,如 Parent1 child1 child2 child3 Parent2 child1 child2 child3 我可以绑定数据,这是从3个表都工作得很好。当父节点检查其所有对应的子节点时,我需要一个工具自动检查。如果我单击父节点1,子节点123将被检查。如果我检查child1,则检查child2和child3。如果我选中子项2,则会选中所有子项

我正在使用TreeView控件。使用复选框从数据库绑定值

几乎有三个子节点用于父节点,如

Parent1 
  child1
    child2
      child3
Parent2
   child1
     child2
        child3
我可以绑定数据,这是从3个表都工作得很好。当父节点检查其所有对应的子节点时,我需要一个工具自动检查。如果我单击父节点1,子节点123将被检查。如果我检查child1,则检查child2和child3。如果我选中子项2,则会选中所有子项3项。怎么做

提前谢谢
Amrutha

一个简单的递归函数可以做到这一点

private bool checkTreeNodes(TreeNodeCollection nodes, bool parentChecked)
{
    var isChecked = parentChecked;
    foreach (TreeNode node in nodes)
    {
        if (node.Checked || parentChecked)
        {
            checkTreeNodes(node.Nodes, true);
            node.Checked = true;
            isChecked = true;
        }
        else
        {
            node.Checked = checkTreeNodes(node.Nodes, false);
            isChecked = isChecked || node.Checked;
        }
    }
    return isChecked;
}
像这样使用它:

checkTreeNodes(myTree.Nodes, false);

如果选中了父节点,则可以使用下面的javascript函数检查所有子节点;如果至少选中了一个子节点,则检查父节点;否则,则检查父节点:

 function OnTreeClick(evt) {
     var src = window.event != window.undefined ? window.event.srcElement : evt.target;
     var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");
     var t = GetParentByTagName("table", src);
     if (isChkBoxClick) {
         var parentTable = GetParentByTagName("table", src);
         var nxtSibling = parentTable.nextSibling;
         if (nxtSibling && nxtSibling.nodeType == 1) {
             if (nxtSibling.tagName.toLowerCase() == "div") {
                 CheckUncheckChildren(parentTable.nextSibling, src.checked);
             }
         }
         CheckUncheckParents(src, src.checked);
     }
 }

 function CheckUncheckChildren(childContainer, check) {
     var childChkBoxes = childContainer.getElementsByTagName("input");
     var childChkBoxCount = childChkBoxes.length;
     for (var i = 0; i < childChkBoxCount; i++) {
         childChkBoxes[i].checked = check;
     }
 }

 function CheckUncheckParents(srcChild, check) {
     var parentDiv = GetParentByTagName("div", srcChild);
     var parentNodeTable = parentDiv.previousSibling;

     if (parentNodeTable) {
         var checkUncheckSwitch;
         var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
         if (isAllSiblingsChecked) {
             checkUncheckSwitch = true;
         }
         else {
             checkUncheckSwitch = false;
         }
         var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
         if (inpElemsInParentTable.length > 0) {
             var parentNodeChkBox = inpElemsInParentTable[0];
             parentNodeChkBox.checked = checkUncheckSwitch;

             CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
         }
     }
 }

 function AreAllSiblingsChecked(chkBox) {
     var parentDiv = GetParentByTagName("div", chkBox);
     var childCount = parentDiv.childNodes.length;
     var k = 0;
     for (var i = 0; i < childCount; i++) {
         if (parentDiv.childNodes[i].nodeType == 1) {
             if (parentDiv.childNodes[i].tagName.toLowerCase() == "table") {
                 var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
                 //if any of sibling nodes are not checked, return false
                 if (prevChkBox.checked) {
                     //add each selected node one value
                     k = k + 1;
                 }
             }
         }
     }

     //Finally check any one of child node is select if selected yes then return ture parent node check

     if (k > 0) {
         return true;
     }
     else {
         return false;
     }
 }
 function GetParentByTagName(parentTagName, childElementObj) {
     var parent = childElementObj.parentNode;
     while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) {
         parent = parent.parentNode;
     }
     return parent;
 }
函数OnTreeClick(evt){
var src=window.event!=window.undefined?window.event.src元素:evt.target;
var isChkBoxClick=(src.tagName.toLowerCase()=“输入”和&src.type==“复选框”);
var t=GetParentByTagName(“表”,src);
如果(单击){
var parentTable=GetParentByTagName(“表”,src);
var nxtSibling=parentTable.nextSibling;
if(nxtSibling&&nxtSibling.nodeType==1){
if(nxtSibling.tagName.toLowerCase()=“div”){
CheckUncheckChildren(parentTable.nextSibling,src.checked);
}
}
CheckUncheckParents(src,src.checked);
}
}
函数CheckUncheckChildren(childContainer,check){
var childChkBoxes=childContainer.getElementsByTagName(“输入”);
var childChkBoxCount=childChkBoxes.length;
对于(变量i=0;i0){
var parentNodeChkBox=inpelmsinparenttable[0];
parentNodeChkBox.checked=checkUncheckSwitch;
CheckUncheckParents(parentNodeChkBox,checkUncheckSwitch);
}
}
}
功能区同级校验(chkBox){
var parentDiv=GetParentByTagName(“div”,chkBox);
var childCount=parentDiv.childNodes.length;
var k=0;
对于(变量i=0;i0){
返回true;
}
否则{
返回false;
}
}
函数GetParentByTagName(parentTagName,childElementObj){
var parent=childElementObj.parentNode;
while(parent.tagName.toLowerCase()!=parentTagName.toLowerCase()){
parent=parent.parentNode;
}
返回父母;
}

我使用此javascript解决了我的问题。

您好,谢谢您的回复。我尝试了您的代码,但出现了错误,例如错误30“admin\u Add\u Role.checkTreeNodes(System.Web.UI.WebControls.TreeNodeCollection,bool)的最佳重载方法匹配)'有一些无效参数错误31参数1:无法从'method group'转换为'System.Web.UI.WebControl.TreeNodeCollection'checkTreeNodes,如您在函数中看到的,它将TreeNodeCollection作为参数。您的错误表示您正在传递树的TreeNodeCollection。