<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>权限设置</title>
   <script language='javascript' type='text/javascript'> 
    var ClienName;
    var tree;//取出TreeView在客户端的表示对象
    ///////////////////TreeView在后台的控件ID,Obj表示TreeView
    function OnTreeNodeChecked(controlID,obj) 
    {
        //debugger
        tree=obj;//取出TreeView在客户端的表示对象
        ClienName=tree.id.substring(0,tree.id.indexOf(controlID));//取出TreeView在客户ID的前缀
        var ele = event.srcElement; 
        if(ele.type=='checkbox') 
        { 
            //当前节点全选 
            var subLength=ClienName.length+14;//取出当前复选框的索引值
            var subLength=tree.id.length+1;
            var nowIndex=ele.id.substring(subLength).substring(0,ele.id.substring(subLength).indexOf("C"));
            
            var childrenDivID = ele.id.replace('CheckBox','Nodes'); 
            var div = document.getElementById(childrenDivID); //获取同级的Div
            if(div!=null) //判断同级的Div是否为Null
            {
                var checkBoxs = div.getElementsByTagName('INPUT'); 
                for(var i=0;i<checkBoxs.length;i++) 
                { 
                    if(checkBoxs[i].type=='checkbox') 
                    checkBoxs[i].checked=ele.checked; 
                }
            }
            //处理选择当前节点的父节点的选中和取消选中
            ChkParent(nowIndex,ele.id,ele.checked);
        } 
    } 
    //上一节点的索引Index,上一节点checkBox的ID,状态(True)
    function ChkParent(index,childId,flag)
    {
    //寻找当前节点的父节点(即寻找上级的DIV)
        for(i=index;i>=0;i--)
        {
            var id=tree.id+"n"+i+"CheckBox";//当前CheckBox的ID
            var parent=document.getElementById(id);//获取当前的CheckBox
            if(parent!=null)//判断获取的当前的CheckBox是否为空
            {   
                var childrenDivID = parent.id.replace('CheckBox','Nodes'); 
                var div = document.getElementById(childrenDivID); //获取同级的Div
                if(div==null) //判断同级的Div是否为Null
                {
                    continue;
                }
                else
                {
                      chk(div,flag);
                        break;
                }
            }
        }
    }
    //根据找到的div逐级处理各级CheckBox的状态
    function chk(obj,flag)
    {
        var chkID=obj.id.replace('Nodes','CheckBox'); 
        var chkbox = document.getElementById(chkID); //获取同级的CheckBox
        if(chkbox!=null)
        {
            //选中状态
            if(flag)
            {
                chkbox.checked=flag;
                //如果为顶层则终止递归
                if(chkID==tree.id+"n0CheckBox")
                {
                    return;
                }
                //递归处理各级CheckBox的状态
                chk(obj.parentNode,flag)
            }
            ///非选中状态
            else
            {
                //如果为顶层则终止递归
                if(chkID==tree.id+"n0CheckBox")
                {
                    return;
                }
                //判断当前节点下面是否有Checkbox选中,如果有选中的,当前节点的CheckBox不取消选中状态,否则取消
                var checkBoxs = obj.getElementsByTagName('INPUT'); 
                var sel=false;//记录当前节点下面是否有Checkbox选中
                for(var i=0;i<checkBoxs.length;i++) 
                { 
                    if(checkBoxs[i].type=='checkbox') 
                    {
                        if( checkBoxs[i].checked)
                        {
                            sel=true;
                            break;
                        }
                    }
                }
                if(!sel)
                {
                    chkbox.checked=flag;
                }
                chk(obj.parentNode,flag)
            }
        }
        else
        {
            return;
        }
    }
    </script>   
</head>
<body>
    <form id="form1" runat="server">
    <div>
       
        <table  border="1" style="width: 596px; height: 354px">
            <tr> &nbsp;<asp:TextBox ID="TextBox1" runat="server" Visible="False"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="新增" Width="50px" OnClick="Button1_Click"/><asp:Button ID="Button2" runat="server" Text="删除" Width="51px" OnClick="Button2_Click" /><asp:Button ID="Button3" runat="server" Text="保存" Width="51px" OnClick="Button3_Click" />
                <input id="Button4" type="button" value="刷新" onclick="location.reload()" style="width: 57px" />
                <input id="Button5" style="width: 58px" type="button" value="退出" onclick="history.go(0)" /></tr>
            <tr>
                <td  valign="top" style="height: 180px; width: 170px;">
                
             <asp:TreeView ID="TreeView1" runat="server" Width="181px" Height="97px" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" >
            </asp:TreeView>
            
            
                </td>
                <td valign="top" style="width: 316px; height: 180px">
                    <asp:TreeView ID="TreeView2" runat="server" ShowCheckBoxes="All" ExpandDepth="0" Width="328px" Height="131px">
                    </asp:TreeView>
                </td>
            </tr>
        </table>
       </div>
    </form>
</body>
</html>

解决方案 »

  1.   

    咋都是js脚本呀,有没有做过C#脚本的啊?
      

  2.   

    TreeNodeCheckChanged 事件怎么不起作用 :
     <script language="javascript">
    <!--
                    function postBackByObject() {
                        var o = window.event.srcElement;
                        if (o.tagName == "INPUT" && o.type == "checkbox") {
                            event.srcElement.nextSibling.click(); ;
                        }
                    }
    -->
    page_load:
                    this.tvRight.Attributes.Add("onclick", "postBackByObject()");
    1、选择父接点的复选框时   子接点的复选框全部选中   
    2、取消父接点的复选框时   子接点的复选框全部取消 
    :
      private void SetChildNoChecked(TreeNodeCollection tnc)
            {
                foreach (TreeNode node in tnc)
                {
                  if (node.Checked == false)
                   {
                        foreach (TreeNode child in node.ChildNodes)
                        {
                          child.Checked = false;
                        }
                  }
                    if (node.ChildNodes.Count != 0)
                        SetChildNoChecked(node.ChildNodes);
                }        }
            private void SetChildChecked(TreeNode node)
            {
                foreach (TreeNode child in node.ChildNodes)
                {
                    if (node.Checked == true)
                    {
                       
                         child.Checked = true;
                        
                    }
                    if (node.ChildNodes.Count != 0)
                        SetChildChecked(child);
                }        }