大家都知道,TreeView实际上是有一个属性,设置为parent或者all等,是可以让treeview接点的前面加上一个复选框的,但是这个复选框,我却找不到它任何的事件,我想实现的功能是,选中父节点的复选框的同时,让其子节点的复选框也同时选中。注意:是选中复选框,不是选中节点。请高手指教。

解决方案 »

  1.   

    一般是用js来实现的搜索关键字:asp.net TreeView 全选
      

  2.   

    private void CheckNodes(TreeNode checkRoot)
      {
      foreach (TreeNode tn in checkRoot.Nodes)
      {
      tn.Checked = checkRoot.Checked;
      }
      }
    JS级联选择
    http://topic.csdn.net/u/20080106/21/beed49b8-09d0-43aa-9ecf-faa9fd49739f.html
      

  3.   

    忘了说了,不用JS,实现效果,用ASP.NET,在服务端实现。
      

  4.   

    不是,关键是,这个生成的网页里根本就找不到复选框,也就是没有这个dom对象,怎么实现啊,服务端更是看不见这个复选框的代码痕迹,这就是这个控件的奇怪之处,它只让选中,却不让级联,而头又让我们实现级联。这就难了,所以请大家看看。
      

  5.   

    在后台个你的那个treeview加上一个属性TreeView1.Attributes.Add("onClick", "OnCheckEvent()");
    js代码是:
    //checkbox点击事件
        function OnCheckEvent()
        {
            var objNode = event.srcElement;
            if(objNode.tagName != "INPUT" || objNode.type != "checkbox")
                return;
            //获得当前树结点
            var ck_ID = objNode.getAttribute("ID");
            var node_ID = ck_ID.substring(0,ck_ID.indexOf("CheckBox")) + "Nodes";
            var curTreeNode = document.getElementById(node_ID);
            //级联选择
            SetChildCheckBox(curTreeNode,objNode.checked);
            SetParentCheckBox(objNode);
        }
        
        //子结点字符串
        var childIds = "";
        //获取子结点ID数组
        function GetChildIdArray(parentNode)
        {
            if (parentNode == null)
                return;
            var childNodes = parentNode.children;
            var count = childNodes.length;
            for(var i = 0;i < count;i ++)
            {
                var tmpNode = childNodes[i];
                if(tmpNode.tagName == "INPUT" && tmpNode.type == "checkbox")
                {
                    childIds = tmpNode.id + ":" + childIds;
                }
                GetChildIdArray(tmpNode);
            }
        }
        
        //设置子结点的checkbox
        function SetChildCheckBox(parentNode,checked)
        {
            if(parentNode == null)
                return;
            var childNodes = parentNode.children;
            var count = childNodes.length;
            for(var i = 0;i < count;i ++)
            {
                var tmpNode = childNodes[i];
                if(tmpNode.tagName == "INPUT" && tmpNode.type == "checkbox")
                {
                    tmpNode.checked = checked;
                }
                SetChildCheckBox(tmpNode,checked);
            }
        }
        
        //设置父结点的checkbox
        function SetParentCheckBox(childNode)
        {
            if(childNode == null)
                return;
            var parent = childNode.parentNode;
            if(parent == null || parent == "undefined")
                return;
            do 
            {
                parent = parent.parentNode;
            }
            while (parent && parent.tagName != "DIV");
            if(parent == "undefined" || parent == null)
                return;
            var parentId = parent.getAttribute("ID");
            var objParent = document.getElementById(parentId);
            childIds = "";
            GetChildIdArray(objParent);
            //判断子结点状态
            childIds = childIds.substring(0,childIds.length - 1);
            var aryChild = childIds.split(":");
            var result = false;
            //当子结点的checkbox状态有一个为false,其父结点包括祖先的checkbox状态为false    
            var =0;    
            for(var i in aryChild)
            {
                var childCk = document.getElementById(aryChild[i]);
                if(childCk.checked)
                    ++;
            }        
            if(==aryChild.length)
                result=true;
            parentId = parentId.replace("Nodes","CheckBox");
            var parentCk = document.getElementById(parentId);
            if(parentCk == null)
                return;
            if(result)
                parentCk.checked = true;
            else
                parentCk.checked = false;
            SetParentCheckBox(parentCk);
        }