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 ...
随机推荐
- InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
问题:打开mysql错误日志时发现大量的如下错误 Error: Table "mysql"."innodb_table_stats" not found. In ...
- QTP 自动化测试桌面程序--笔记(关闭 启动程序脚本) 、安装
0 安装qtp .exe 文件 安装 插件文件(如delph) 1 关闭 启动程序: 将要操作的程序-存入localdatatable中 设置 迭代一次 rem SystemUtil.ClosePro ...
- How to enable AHCI on Windows7
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci
- windows git支持arc命令
本文整理了在Windows系统上安装代码审查工具Arcanist的过程.目的是配合Phabricator进行代码review.配置成功后可使用arc diff命令来发起code review. 1.安 ...
- hdu-2222(ac自动机模板)
题意:给你一个长度为n的单词表,一个文本串,问你这个文本串中出现了单词表中多少个单词: 解题思路:ac自动机的模板题,可以直接当模板用: 代码: #include<iostream> #i ...
- [离散时间信号处理学习笔记] 3. 一些基本的LTI系统
首先我们需要先对离散时间系统进行概念上的回顾: $y[n] = T\{ x[n] \}$ 上面的式子表征了离散时间系统,也就是把输入序列$x[n]$,映射称为$y[n]$的输出序列. 不过上述式子也可 ...
- 前端es6基础语法
1.let.const.var var是声明全局的变量,作用域是全局,const是声明全局的常量,不能修改,而let是块级变量只在当前声明的作用域中生效: { var a = 10; let b = ...
- a标签实现锚点功能
a标签实现锚点功能 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- python基础数据类型--dict 字典
字典 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必 ...
- [IOI2018]高速公路收费——二分查找+bfs
题目链接: IOI2018highway 题目大意:给出一张$n$个点$m$条边的无向图,并给出一对未知的起点和终点,每条边都有两种边权$A$和$B$(每条边的$A$和$B$都分别相同),每次你可以设 ...