TreeView CheckBox勾选联动
http://www.cnblogs.com/excellently/p/TreeViewCheckBox.html
在C# Winform项目中用到了TreeView控件,并且需要勾选的功能。父子节点联动,需要实现如下:
1.当选中父节点的时候,如果它的子节点有没有选中的,则选中。
2.当取消选中父节点的时候,将所有子节点都取消选中。
3.当选中子节点的时候,要判断它的父节点中的所有子节点,是不是都已经选中,如果都选中则选中父节点。
4.当取消子节点的时候,要判断父节点是否已经被勾选上,如果勾选上则取消选中父节点。
注意:所有的节点都有可能既是父节点,又是子节点。举例:当效果3满足时,选中了父节点,那么这个父节点有自己的父节点,那么就要再执行一遍效果3.
如果我们处理了一个节点,那么这个节点相关联的父节点,和父节点的父节点,。。。,以及这个节点的子节点,和这个节点的子节点。。。,都会发生联动反应。所以我在处理这个问题的时候,用到了递归。
TreeView有一个事件:AfterCheck。我们不用去命名新的递归,直接用这个事件,当勾选了一个节点的时候,会进入这个事件,在这个事件内用代码去勾选节点的时候,也会触发这个事件。AfterCheck的参数就是勾选的节点。;对于我联动勾选节点的情况而言,这个就是递归。
勾选节点联动代码,只要在AfterCheck事件内编写代码就可以达到效果,下面是代码,没有注释:
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
try
{
if (e.Node.Nodes.Count > 0)
{
bool NoFalse = true;
foreach (TreeNode tn in e.Node.Nodes)
{
if (tn.Checked == false)
{
NoFalse = false;
}
}
if (e.Node.Checked == true || NoFalse)
{
foreach (TreeNode tn in e.Node.Nodes)
{
if (tn.Checked != e.Node.Checked)
{
tn.Checked = e.Node.Checked;
}
}
}
}
if (e.Node.Parent != null && e.Node.Parent is TreeNode)
{
bool ParentNode = true;
foreach (TreeNode tn in e.Node.Parent.Nodes)
{
if (tn.Checked == false)
{
ParentNode = false;
}
}
if (e.Node.Parent.Checked != ParentNode && (e.Node.Checked == false || e.Node.Checked == true && e.Node.Parent.Checked == false))
{
e.Node.Parent.Checked = ParentNode;
}
}
}
catch (Exception ex)
{
}
}
上面已经写的很详细了,注释我就不写了。
TreeView CheckBox勾选联动的更多相关文章
- jquery checkbox勾选取消勾选的诡异问题
jquery checkbox勾选/取消勾选的诡异问题jquery checkbox勾选/取消勾选的诡异问题 <form> 你爱好的运动是?<input type=&q ...
- 设置checkbox选中,设置radio选中,根据值设置checkbox选中,checkbox勾选
设置checkbox选中,设置radio选中,根据值设置checkbox选中,checkbox勾选 >>>>>>>>>>>>&g ...
- 获取checkbox勾选的id
需求描述:做批量删除或者批量修改的时候需要获得多个id,根据checkbox勾选来获取对应的d 两种方法: //html代码<table id="table1"> &l ...
- asp.net 翻页时用ViewState保存上一页checkbox勾选的值
/// <summary> /// checkbox勾选取消勾选事件 /// </summary> /// <param nam ...
- 用DIV遮罩解决checkbox勾选无效的问题
在前端开发的过程中,遇到一种情况,需要勾选,为了用户的操作便捷就将click事件放到了DIV上.(其中使用了knockout.js) 代码大概如下: <div id="one" ...
- TreeView checkbox 全选
在使用TreeView 控件 ,进行权限管理的时候,需要使用 checkbox全选. 勾选父节点,子节点全部选中.取消父节点,子节点不选中. 勾选子节点,父节点也选中. 以下是在使用的例子: < ...
- checkbox勾选事件,JQ设置css,下拉框JQ选中
<input id="CheckMainCompany" type="checkbox"/> $(function() { $("#Che ...
- bootstarp treeview 获取勾选和获取Selected选中
在用treeview的时候,经常会遇到一些官网没有详细说明的东西,比如获取勾选和获取选中的方法,获取选中官网是有明显说明的, 如下 : $('#resourceTree').treeview('get ...
- Javascript对checkbox勾选判断,错误提示和按钮变色操作
同意相关条款未打钩时,登录按钮为灰色且无法提交,点击灰色的登录按钮提示同意相关条款,打钩后变成亮色且可以提交信息. 勾选框及文字: <div class="check-rule&quo ...
随机推荐
- linux硬盘的分区、格式化、挂载以及LVM
linux硬盘的分区.格式化.挂载以及LVM 多块硬盘的组合: 硬盘分两种:ide和scsi. ide硬盘: /dev/hda 第一块IDE硬盘 /dev/hdb 第二块IDE硬盘 ... /de ...
- vue計算屬性
計算屬性:computed 和method的差別:computed是基於它的依賴緩存,只有它的相關依賴發生改變時才會重新獲取值. method是在重新渲染時,函數總會重新調用. comuputed:默 ...
- TP5上传图片
模板: <form action="{:url('Temp/addTempDo')}" enctype="multipart/form-data" met ...
- PDO访问Mysql数据库
$dsn = 'mysql:host=127.0.0.1;dbname=myblog'; $username = 'root'; $pwd = '; $pdo = new PDO($dsn,$user ...
- css进行网站布局
一.一列布局(例如百度首页) 通常用 {margin:0 auto;} 控制. <!DOCTYPE> <html xmlns="http://www.w3.org/1999 ...
- 使用电脑adb给Essential Phone刷机 —(官方篇)
用ADB给Essential Phone线刷升级 重要:请确保在刷机前已经解锁,关于解锁教程群里有! 准备 原版boot Twrp boot Magisk卡刷包 到官网下载OTA包 准备好Essent ...
- How to sign app
codesign --display --verbose=4 /applications/qq.app codesign --display --entitlements - /application ...
- 修改iptables后重启返回错误
在防火墙添加规则后我是这样改的vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ...
- HDU3507-Print Article-斜率dp入门题
为了学CDQ分治,从斜率dp和凸包开始做吧.. 代码就是维护一个凸包.利用递增的性质丢掉不合适的点. http://www.cnblogs.com/Rlemon/p/3184899.html 代码学的 ...
- CrawlSpider爬取拉钩
CrawlSpider继承Spider,提供了强大的爬取规则(Rule)供使用 填充custom_settings,浏览器中的请求头 from datetime import datetime imp ...