Treeview - How do you auto select/deselect all sub nodes, when parent node is clicked.

Last post 09-25-2008 3:53 PM by abhishek_damle. 2 replies.

Sort Posts:

  • Treeview - How do you auto select/deselect all sub nodes, when parent node is clicked.

    09-23-2008, 5:05 PM
    • Member
      5 point Member
    • SpongeCrane
    • Member since 01-22-2007, 4:58 PM
    • Posts 42

    Hi,

    If you have a treeview like below:

    + Parent Node

       +child 1

       +child 2

       +child N 

     

    How do you auto select/deselect all nodes including the parent node?

     

    thanks

    -S
     

  • Re: Treeview - How do you auto select/deselect all sub nodes, when parent node is clicked.

    09-25-2008, 1:09 AM
    Answer

    Hi,

    SpongeCrane:
    How do you auto select/deselect all nodes including the parent node?

    If you want to do in the client side, you can try to refer the below javascript code:

    <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ShowCheckBoxes="All" ShowLines="True" onclick="client_OnTreeNodeChecked();" >
            </asp:TreeView>  

    <script language=javascript type="text/javascript">    
         function client_OnTreeNodeChecked(evt)
            {
                var obj;
                if(window.event)    obj = window.event.srcElement;
                else                obj = (evt ? evt : (window.event ? window.event : null)).target;
                var treeNodeFound = false;
                var checkedState;
                if (obj.tagName == "INPUT" && obj.type == "checkbox" )
                {
                    checkedState = obj.checked;
                    do
                    {
                      obj = obj.parentNode;
                    }
                    while (obj.tagName != "TABLE")

     


                    var parentTreeLevel = obj.rows[0].cells.length;
                   
                    //get the current node's parent node.
                    var tables = obj.parentNode.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;
                            }
                        }
                    }
                }
            } </script>

     If you want to implement it in the server side, you can do it the TreeView's TreeNodeCheckChanged event:
     protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
        {
            if (e.Node.Checked)
            {
              
                if (e.Node.ChildNodes.Count != 0)
                {
                    checkchild(e.Node, true);//make all the child node checked
                }
                else
                {
                    TreeNode tnpre = e.Node.Parent;
                    bool flag = true;
                    foreach (TreeNode tn in tnpre.ChildNodes)
                    {
                        if (!tn.Checked)// if one child is unchecked, make the parent is unchecked
                        {
                            flag = false;
                            break;
                        }
                    }
                    if (flag)
                    {
                        tnpre.Checked = true;
                    }
                   
                }
            }
            else
            {
                if (e.Node.Parent != null && e.Node.Parent.Checked)
                {
                    RetrieveParentNode(e.Node, false);
                }
                checkchild(e.Node, false);// make all child node unchecked
            }
        }
    In addition, when you check/uncheck the checkbox of the TreeNode, the page will not postback, so the TreeNodeCheckChanged event cannot be fired.
    you can try use the Javascript to make the page postback when you check/uncheck the checkbox.
    function postBackByObject()
    {
        var o = window.event.srcElement;
        if (o.tagName == "INPUT" && o.type == "checkbox")
        {
           __doPostBack("","");
        }
    }
    <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ShowCheckBoxes="All" ShowLines="True" onclick="postBackByObject"> 
    Amanda Wang
    Microsoft Online Community Support

    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
  • Re: Treeview - How do you auto select/deselect all sub nodes, when parent node is clicked.

    09-25-2008, 3:53 PM
    • Member
      632 point Member
    • abhishek_damle
    • Member since 09-17-2008, 3:23 PM
    • Mumbai, India
    • Posts 97

    HI friend,

    If you dont mind postback use following small code:

     

    protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
        {
            if (e.Node.Checked)
            {
                foreach (TreeNode childnode in e.Node.ChildNodes)
                {
                    childnode.Checked = true;
                }
            }
            else
            {
                foreach (TreeNode childnode in e.Node.ChildNodes)
                {
                    childnode.Checked = false;
                }
            }
        }

     

    If it helps you PLEASE MARK IT AS ANSWER

    Thank you

Page 1 of 1 (3 items)