2011-08-23 119 views
5

使用TreeView控件System.Web.UI类来显示项目的类别和子类别。Web窗体树状检查父节点检查子节点检查

我曾尝试下面的代码,但不希望

 protected void tvwOrganisation_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) 
     { 
      if (tvwOrganisation.CheckedNodes.Count > 0) 
      { 
       // the selected nodes. 
       foreach (TreeNode node in tvwOrganisation.CheckedNodes) 
       { 

        if (node.ChildNodes.Count > 0) 
        { 
         foreach (TreeNode childNode in node.ChildNodes) 
         { 
          childNode.Checked = true; 
         } 
        } 

       } 

      } 
} 

有没有一种方法,我可以做到这一点,我已经尝试过的JavaScript。

什么是替换AfterCheck - 窗体窗体事件在Web窗体中。

+0

获取代码:// stackoverflow.com/questions/1437617/asp-net-treeview-checkbox-selection/1437655#1437655 –

+0

它的工作表示感谢 – sudheshna

+0

为什么你不在这里发表你的答案并接受它? – AYK

回答

6

树标签如下,

<asp:TreeView ID="tvwRegionCountry" runat="server" ShowCheckBoxes="All" ExpandDepth="0" AfterClientCheck="CheckChildNodes();" PopulateNodesFromClient="true" ShowLines="true" ShowExpandCollapse="true" OnTreeNodeCheckChanged="tvwRegionCountry_TreeNodeCheckChanged" 
                onclick="OnTreeClick(event)"> 
               </asp:TreeView> 

添加为asp.net treeview checkbox selection

<script language="javascript" type="text/javascript"> 
    function OnTreeClick(evt) { 
     var src = window.event != window.undefined ? window.event.srcElement : evt.target; 
     var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox"); 
     if (isChkBoxClick) { 
      var parentTable = GetParentByTagName("table", src); 
      var nxtSibling = parentTable.nextSibling; 
      if (nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node 
      { 
       if (nxtSibling.tagName.toLowerCase() == "div") //if node has children 
       { 
        //check or uncheck children at all levels 
        CheckUncheckChildren(parentTable.nextSibling, src.checked); 
       } 
      } 
      //check or uncheck parents at all levels 
      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; 

      if (check) //checkbox checked 
      { 
       var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild); 
       if (isAllSiblingsChecked) 
        checkUncheckSwitch = true; 
       else 
        return; //do not need to check parent if any(one or more) child not checked 
      } 
      else //checkbox unchecked 
      { 
       checkUncheckSwitch = false; 
      } 

      var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input"); 
      if (inpElemsInParentTable.length > 0) { 
       var parentNodeChkBox = inpElemsInParentTable[0]; 
       parentNodeChkBox.checked = checkUncheckSwitch; 
       //do the same recursively 
       CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch); 
      } 
     } 
    } 

    function AreAllSiblingsChecked(chkBox) { 
     var parentDiv = GetParentByTagName("div", chkBox); 
     var childCount = parentDiv.childNodes.length; 
     for (var i = 0; i < childCount; i++) { 
      if (parentDiv.childNodes[i].nodeType == 1) //check if the child node is an element node 
      { 
       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) { 
         return false; 
        } 
       } 
      } 
     } 
     return true; 
    } 

    //utility function to get the container of an element by tagname 
    function GetParentByTagName(parentTagName, childElementObj) { 
     var parent = childElementObj.parentNode; 
     while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) { 
      parent = parent.parentNode; 
     } 
     return parent; 
    } 

</script> 

提到,它的工作如下JS ......从这个线程HTTP