<%@ 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> <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>
<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> <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>
解决方案 »
- 谁用过AutoAuthCode验证码控件,为什么会总是验证码错误?
- 如何实现验证用户名密码大小写??
- GridView获取控件某单元格的值
- 日期处理(C#)
- 服务器文本框录入数据,保存数据时,变成了乱码("???")
- 如何提示“用户名中包含非法字符”
- 关于分页的一个问题(在线等待!!!!)
- 我写了一个类为Patient,判断类对象中的属性为空问题,高手请进!!
- 请问:IE6默认不允许cookie,session无法使用,怎么解决?
- 如何用VB.net取得webform中datagrid中在edit時錄入的文件值?
- 怎么把<%#DataBinder.Eval(Container.DataItem, "productname")%>赋值给一个变量?
- 在 GridView 中 的小问题.....
<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);
} }