【问题标题】:Disable Check-boxes recursively in RAD tree view在 RAD 树视图中递归禁用复选框
【发布时间】:2010-07-14 12:45:45
【问题描述】:

当用户检查父节点并禁用所有子节点的复选框时,我试图在 Telerik RAD 树视图中选择子节点的所有复选框。我有一个递归函数可以成功选中这些框,但是我在禁用所有子复选框方面运气不佳。这是我的代码:

  <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 树如下所示:

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

【问题讨论】:

    标签: javascript recursion treeview checkbox telerik


    【解决方案1】:

    您应该使用nodes.getNode(i).set_enabled(false) 禁用节点。

    【讨论】:

    • 嗯,有点工作,但只禁用每个子节点,而不是兄弟节点。而且我没有考虑取消选中父级并重新启用其子级/兄弟级。
    【解决方案2】:
            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);
                    }
                }
            }
    

    在 RadTreeView 的 'OnClientNodeChecked' 事件上调用此函数,例如 OnClientNodeChecked="CheckedIt"。

    【讨论】:

      猜你喜欢
      • 2013-02-11
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2011-01-24
      • 2014-05-14
      相关资源
      最近更新 更多