Отключите флажки рекурсивно в представлении дерева RAD - PullRequest
0 голосов
/ 14 июля 2010

Я пытаюсь установить все флажки дочерних элементов в представлении Telerik RAD Tree, когда пользователь проверяет родительский узел и отключает флажки всех дочерних узлов.У меня есть рекурсивная функция, которая успешно устанавливает флажки, но у меня нет особой удачи в отключении всех дочерних флажков.Вот мой код:

  <script type="text/javascript" language="JavaScript">
    function UpdateChildrenRecursively(nodes, checked)
    {
       var i;
       for (i=0; i<nodes.get_count(); i++)
       {
           if (checked)
           {
               nodes.getNode(i).check();     
           }
           else
           {
               nodes.getNode(i).set_checked(false);
           }

           // if the node has children, call the recursive function
           // then disable the checkboxes for each child
           if (nodes.getNode(i).get_nodes().get_count()> 0)
           {
               UpdateChildrenRecursively(nodes.getNode(i).get_nodes(), checked);
               nodes.getNode(i).get_nodes().disabled = true; 
           }
       }
    }
    function clientNodeChecked(sender, eventArgs)
    {
       var childNodes = eventArgs.get_node().get_nodes();
       var isChecked = eventArgs.get_node().get_checked();
       UpdateChildrenRecursively(childNodes, isChecked);
    }
</script>

Вот как выглядит Telerik RAD Tree:

<telerik:RadTreeView ID="RadTreeView2" OnClientNodeChecked="clientNodeChecked" CheckBoxes="true"
                    runat="server" DataSourceID="XmlDataSource1">
                    <DataBindings>
                        <telerik:RadTreeNodeBinding DataMember="Node" TextField="Text" ExpandedField="Expanded" />
                    </DataBindings>
                </telerik:RadTreeView>
                <asp:XmlDataSource runat="server" ID="XmlDataSource1" DataFile="Tree.xml" XPath="/Tree/Node" />

Ответы [ 2 ]

0 голосов
/ 19 августа 2013
        function CheckedIt(sender, eventArgs) {
            var childNodes = eventArgs.get_node().get_nodes();
            var isChecked = eventArgs.get_node().get_checked();


            var node = eventArgs.get_node();
            if (!node.get_checked()) {
                while (node.get_parent().set_checked != null) {
                    node.get_parent().set_checked(false);
                    node = node.get_parent();
                }
            }
            UpdateAllChildren(childNodes, isChecked);
        }

       function UpdateAllChildren(nodes, checked) {
            var i;
            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);
                }
            }
        }

Вызовите эту функцию при событии OnClientNodeChecked объекта RadTreeView, например OnClientNodeChecked = "CheckedIt".

0 голосов
/ 14 июля 2010

Вы должны использовать nodes.getNode(i).set_enabled(false) для отключения узла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...