2011-08-23 42 views
5

Im sử dụng kiểm soát Treeview của lớp System.Web.UI, để hiển thị Danh mục và danh mục phụ của một mục.Số lần xem trang trong các nút con kiểm tra biểu mẫu web trên nút cha mẹ kiểm tra

Tôi đã thử đoạn mã sau nhưng không có hy vọng

 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; 
         } 
        } 

       } 

      } 
} 

Có cách nào tôi có thể làm được điều này, tôi đã cố gắng javascript quá.

Ngoài ra, sự thay thế của sự kiện AfterCheck - windows formd trong biểu mẫu web là gì.

+0

Lấy mã từ chủ đề này http: // stackoverflow.com/questions/1437617/asp-net-treeview-checkbox-selection/1437655#1437655 –

+0

Nó hoạt động nhờ – sudheshna

+0

tại sao bạn không đăng câu trả lời của bạn ở đây và chấp nhận nó? – AYK

Trả lời

6

Thẻ cây là như sau,

<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> 

gia tăng sau JS như đã đề cập trong 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> 

và nó làm việc ...

Các vấn đề liên quan