当前位置:编程学习 > C#/ASP.NET >>

C#中的TreeView的Check选中问题

TreeView如何实现 这样的功能 

1.选中父节点 子节点全部选中 
2.选中部分子节点 父节点是方框选中 半选中 
3.选中全部子节点 父节点选中 

就像Windows一样 
--------------------编程问答--------------------
  function OnTreeNodeChecked() 
    { 
        var ele = event.srcElement; 
        if(ele.type=='checkbox') 
        { 
            
            var childrenDivID = ele.id.replace('CheckBox','Nodes'); 
            var div = document.getElementById(childrenDivID); 
            if(div==null)
                return; 
                
            var checkBoxs = div.getElementsByTagName('INPUT'); 
            for(var i=0;i<checkBoxs.length;i++) 
            { 
                if(checkBoxs[i].type=='checkbox') 
                    checkBoxs[i].checked=ele.checked; 
            } 

            if(ele.parentNode.parentNode.parentNode.parentNode.parentNode.id=='<%=TreeUser.ClientID%>')
            {
                if(current==null)
                {
                    current=ele;
                }
                else
                {
                                    
                    current.checked=false;
                    childrenDivID = current.id.replace('CheckBox','Nodes'); 
                    div = document.getElementById(childrenDivID); 
                    if(div!=null)
                    {                            
                        checkBoxs = div.getElementsByTagName('INPUT'); 
                        for(var i=0;i<checkBoxs.length;i++) 
                        { 
                            if(checkBoxs[i].type=='checkbox') 
                                checkBoxs[i].checked=false; 
                        }
                    } 
                    if(current==ele)
                    {
                        current=null;
                    }
                    else
                    {
                        current=ele;
                        
                    }
                }
            }           
        } 
    } 
     
--------------------编程问答-------------------- 不好意思,帮不上忙,还没试过半选中 --------------------编程问答-------------------- 这个 我原来的项目中用到过。
我找找 给你复制下 --------------------编程问答-------------------- 有半选中  那就不能用 自带的Checkbox了 
可以在几点前面加图片   没选中 图片  选中 图片  半选中 图片 
根据不同的情况换图片 --------------------编程问答--------------------
引用 3 楼 jason_dct 的回复:
这个 我原来的项目中用到过。
我找找 给你复制下


大哥 找到没 我还是不知道如何半选中 
谢谢 --------------------编程问答-------------------- 这个估计得自己写控件了,因为treeview的复选样式就两种状态,不像checkedlistbox有三种 --------------------编程问答-------------------- 关注一下 --------------------编程问答-------------------- 使用checkstate 给checkbox赋值,有三种状态。

选中 checked
不选中  unchecked
不确定  interminate(类似这个名字)--你要求的半选中。 --------------------编程问答-------------------- 关注 呵呵 --------------------编程问答-------------------- 不好意思,看错题目了。

这个问题我的解决办法是  给treeviwe的imagelist添加3个分别表示三个状态的image

通过设置 选择的image来表示其选中状态。 --------------------编程问答--------------------

        //改变所有子节点的状态
        public static void CheckAllChildNodes(TreeNode pn, bool IsChecked)
        {
            foreach (TreeNode tn in pn.Nodes)
            {
                tn.Checked = IsChecked;
                if (tn.Nodes.Count > 0)
                {
                    CheckAllChildNodes(tn, IsChecked);
                }
            }
        }

        //改变父节点的选中状态
        public static void CheckParentNode(TreeNode curNode, bool IsChecked)
        {
            bool bChecked = true;

            if (curNode.Parent != null)
            {
                foreach (TreeNode node in curNode.Parent.Nodes)
                {
                    if (node.Checked == false)
                    {
                        bChecked = false;
                        break;
                    }
                }

                if (bChecked)
                {
                    curNode.Parent.Checked = true;
                    CheckParentNode(curNode.Parent, true);
                }
                else
                {
                    curNode.Parent.Checked = false;
                    CheckParentNode(curNode.Parent, false);
                }
            }
        }

--------------------编程问答-------------------- 半选中只能用其他控件  treeview 没有半选中状态! --------------------编程问答-------------------- --------------------编程问答-------------------- function postBackObject() {
            var o = window.event.srcElement;
            if (o.tagName == "INPUT" && o.type == "checkbox") {//点击treeview的checkbox是否触发
                var d = o.id; //获得当前checkbox的id
                var e = d.replace("CheckBox", "Nodes"); //通过查看脚本信息,获得包含所有子节点的div的id
                var div = window.document.getElementById(e); //获得div对象
                if (div != null) {//如果不为空,表示存在子节点
                    var check = div.getElementsByTagName("INPUT"); //获得div中所有的已input开始的标记
                    for (i = 0; i < check.length; i++) {
                        if (check[i].type == "checkbox") {
                            check[i].checked = o.checked; //子节点和父节点的状态一致,即全选
                        }
                    }
                } else {//点击子节点的时候,是父节点的状态改变,即不为全选
                    var divid = o.parentElement.parentElement.parentElement.parentElement.parentElement; //子节点所在的div
                    var id = divid.id.replace("Nodes", "CheckBox"); //获得根节点的id
                    var checkbox = divid.getElementsByTagName("INPUT"); //获得所有子节点数
                    var s = 0;
                    for (i = 0; i < checkbox.length; i++) {
                        if (checkbox[i].checked) {
                            s++;
                        }
                    }
                    if (s == checkbox.length) {//如果全部选中或选择的是另外一个根节点的子节点,
                        window.document.getElementById(id).checked = true; //则开始的根节点仍为选中状态
                    } else {
                        window.document.getElementById(id).checked = false;
                    }
                }
            }
        }
额,没有半选中的 --------------------编程问答-------------------- 做三种状态图片控件 然后传值判断
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,