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;
        }
  • 相关阅读:
    第三章:模板扩展
    第二章:表单和模板
    第一章:引言
    ZABBIX 调用PYTHON脚本监控 磁盘剩余空间(创建模版,创建监控项,创建触发器)
    访问虚拟机中的架设的Web服务器
    服务器上的 Git
    windows命令
    POPTEST联合创始人李爱然的“IT培训创业的随想"
    老李分享:大数据性能调优案例
    老李思考:看夏洛特烦恼有感
  • 原文地址:https://www.cnblogs.com/newwind521/p/469934.html
Copyright © 2011-2022 走看看