zoukankan      html  css  js  c++  java
  • 经典实例--客户端操作带CheckBox的TreeView(2)

    经典实例--客户端操作带CheckBox的TreeView(2)--选择子节点后自动选择父节点;取消子节点后根据情况的递归取消父节点。
    把前面的tree_oncheck()修改一下,然后增加两个方法setParent()和checkBrother(),代码如下:
    //节点的oncheck事件
    function tree_oncheck(tree)
    {
        
    var node=tree.getTreeNode(tree.clickedNodeIndex);
        
    var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
        setcheck(node,Pchecked);
        setParent(node,Pchecked);
    //如果是选择那么选择其父接点.
        document.all.checkedNodes.value="";
        document.all.unchecked.value
    ="";
        FindCheckedFromNode(TreeView1);
    }


    //设置子节点选中/取消;
    //
    同时需要设置父节点的状态(如果是取消选中的话,仅仅设置本节点及其所有字接点,不涉及父接点)
    function setParent(node,Pc)
    {
        
    var parentNode = node.getParent();
        
    if(parentNode)
        
    {    
            
    var parentNodeFather = parentNode.getParent();
            
    if(parentNodeFather)
            
    {
                setParent(parentNode,Pc);
            }

            
    if(Pc)
                
    {parentNode.setAttribute("checked",Pc);}
            
    else
            
    {
                checkBrother(parentNode,Pc,node.getAttribute(
    "NodeData"))
            }

        }

    }

    //检查子接点是否有选择的,如果有一个选择了,那返回true
    //
    只查第一级节点.
    function checkBrother(parentNode,Pc,nodeData)
    {
        
    var childNodes = new Array();
        childNodes 
    = parentNode.getChildren();
        
    if(childNodes.length >0)
        
    {
            
    var bChecked = true;
            
    for(var i=0;i<childNodes.length;i++)
            
    {
                
    if(childNodes[i].getAttribute("checked"== true &&  childNodes[i].getAttribute("NodeData"!= nodeData)
                
    {
                    
    //alert(i+childNodes[i].getAttribute("Text"));
                    bChecked = false;
                    
    break;
                }

            }

            
    if(bChecked)
            
    {
                parentNode.setAttribute(
    "checked",Pc);
            }

            
    else
            
    {
                
    //所有父结点选择
                setParent(parentNode,!Pc)
            }

        }

        
    else
        
    {
            parentNode.setAttribute(
    "checked",Pc);
        }

    }



    TreeView节点的精确定位问题(通过NodeData来定位)

        //Page_Load事件里根据NodeData来展开到到定位的节点
        
    //这里是修改别人的(作者是根据Node的Text定位的.
        FindInTree2(Request.QueryString["selectedNodeData"].ToString());

        
    //根据NodeDate寻找节点
        private void FindInTree2(string strNodeData)
        
    {  
            
    foreach (TreeNode tn in TreeView1.Nodes)            
            
    {
                
    if (tn.NodeData != strNodeData)
                
    {   
                    FindInTree2(tn,strNodeData);
                }
     
                
    else
                
    {   
                    ExpandTree2(tn);
                    
    return;
                }

            }

        }

        
    //根据NodeDate寻找节点
        private void FindInTree2(TreeNode objTreeNode,string strNodeData)
        
    {   
            
    foreach (TreeNode tn in objTreeNode.Nodes)            
            
    {
                
    if (tn.NodeData != strNodeData)
                
    {

                    FindInTree2(tn,strNodeData);
                }
     
                
    else
                
    {   
                    ExpandTree2(tn);
                    
    return;
                }

            }

        }

        
    //根据NodeDate展开节点
        private void ExpandTree2(TreeNode objTreeNode)
        
    {   
            
    string strIndex = "0";

            objTreeNode.Expanded 
    = true;

            strIndex 
    = objTreeNode.GetNodeIndex();

            
    while (objTreeNode.Parent is TreeNode)
            
    {
                objTreeNode 
    = ((TreeNode)objTreeNode.Parent);
                objTreeNode.Expanded 
    = true;                
            }


            TreeView1.SelectedNodeIndex 
    = strIndex;
        }
  • 相关阅读:
    129 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 02 懒汉式的代码实现
    128 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 01 饿汉式的代码实现
    127 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 02 单例模式概述 01 单例模式的定义和作用
    126 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 01 设计模式概述 01 设计模式简介
    125 01 Android 零基础入门 02 Java面向对象 05 Java继承(下)05 Java继承(下)总结 01 Java继承(下)知识点总结
    leetcode-----121. 买卖股票的最佳时机
    leetcode-----104. 二叉树的最大深度
    Json串的字段如果和类中字段不一致,如何映射、转换?
    Mybatis-Plus的Service方法使用 之 泛型方法default <V> List<V> listObjs(Function<? super Object, V> mapper)
    模糊查询
  • 原文地址:https://www.cnblogs.com/newwind521/p/469934.html
Copyright © 2011-2022 走看看