This is a migrated thread and some comments may be shown as answers.

Disable unchecking child nodes when parent node is checked

2 Answers 438 Views
TreeView
This is a migrated thread and some comments may be shown as answers.
Marja
Top achievements
Rank 1
Marja asked on 20 Mar 2014, 08:39 PM
I have a treeview with checkboxes where selecting/checking a parent node also needs to selects/checks all its child nodes. This can easily be handled by setting CheckChildNodes="true".

However, it is then still possible to unselect those childnodes. How can I prevent that?

Best regards, Marja

2 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 21 Mar 2014, 06:20 AM
Hi Marja,

Please try the following JavaScript to achieve your scenario.

JavaScript:
<script type="text/javascript">
    function OnClientNodeChecking(sender, args) {
        //OnClientNodeChecking event of RadTreeView
        if (args.get_node()._hasChildren() == false) {
            if (args.get_node().get_parent().get_checked() == true) {
                args.set_cancel(true);
            }
        }
    }
</script>

Thanks,
Princy.
0
Marja
Top achievements
Rank 1
answered on 21 Mar 2014, 10:55 AM
Hi Princy,

Thank you for your help.

Your answer was not exactly what I needed, but it put me on the right track. This is what finally worked for me:

<script type="text/javascript">
        function UpdateAllChildren(nodes, checked) {
            var i;
            var test;
            for (i = 0; i < nodes.get_count() ; i++) {
                if (checked) {
                    nodes.getNode(i).check();
                }
                else {
                    nodes.getNode(i).set_checked(false);
                }
 
                if (nodes.getNode(i).get_nodes().get_count() > 0) {
                    UpdateAllChildren(nodes.getNode(i).get_nodes(), checked);
                }
            }
        }
 
        function OnClientNodeChecking(sender, args) {
            var node = args.get_node();
            if (node.get_parent() && node.get_parent().get_checked() == true) {
                node.check();
                args.set_cancel(true);
            }
        }
 
        function OnClientNodeChecked(sender, args) {
            var node = args.get_node();
            if (node.get_checked()) {
                if (node.get_nodes().get_count() > 0) {
                    UpdateAllChildren(node.get_nodes(), true);
                }
            }
        }
    </script>
Tags
TreeView
Asked by
Marja
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
Marja
Top achievements
Rank 1
Share this question
or