TreeView树,全选,反选,平级选操作
首先事件选择,选择的是MouseUp事件。为啥?因为凡是跟Check有关的,在选中父节点或者子节点,都会二次触发。然后发生的就是死循环。
Up事件就可以避免二次触发。Down事件呢?那就触发AfterCheck事件了。事件选好了, 直接上代码。
处理思路:选中/取消当前节点,先选中其所有父节点,再选中其子节点
注意平级节点处理:有平级节点选中,取消时需要遍历父节点。
若有一个平级节点处于选中,则父节点为选中。
若所有平级都没有选中的了,则父节点要取消选中
/// <summary>
/// 处理树节点选中和取消选中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void treeView_MouseUpClick(object sender,MouseEventArgs e)
{
TreeView tree = sender as TreeView;
if (tree == null)
return;
TreeNode node = tree.GetNodeAt(e.X, e.Y);
if (node == null)
return;
SetTreeNodeCheckBoxState(node,true,node.Checked);
SetTreeNodeCheckBoxState(node, false, node.Checked);
} /// <summary>
/// 处理父节点,子节点的选中
/// </summary>
/// <param name="node">需要选中的树</param>
/// <param name="isSetParentState">是否选中父节点</param>
/// <param name="state">选中/不选中</param>
public static void SetTreeNodeCheckBoxState(TreeNode node, bool isSetParentState, bool state)
{
if (node == null)
return;
node.Checked = state;
if (isSetParentState && node.Parent != null && node.Checked==true)
{
SetTreeNodeCheckBoxState(node.Parent, isSetParentState, state);
}
else if (isSetParentState && node.Parent != null && node.Checked == false)
{
//处理取消选中
bool isSelect = false;
foreach(TreeNode n in node.Parent.Nodes)
{
if (n.Checked==true)
isSelect = true;
}
//平级都未有选中的才取消选中
if(isSelect==false)
SetTreeNodeCheckBoxState(node.Parent, isSetParentState, state);
}
else if (!isSetParentState && node.Nodes!=null && node.Nodes.Count > )
{
foreach (TreeNode node2 in node.Nodes)
{
SetTreeNodeCheckBoxState(node2, isSetParentState, state);
}
}
}
TreeView树,全选,反选,平级选操作的更多相关文章
- jQuery实现checkbox全选反选及删除等操作
1.list.html 说明:用checkbox数组Check[]存放每一行的ID值 <div id="con"> <table width="100% ...
- jQuery之标签操作和返回顶部、登录验证、全选反选、克隆示例
一.样式操作 1.JQ中的样式类 somenode.addClass();// 添加指定的CSS类名. somenode.removeClass();// 移除指定的CSS类名. somenode.h ...
- html中全选反选
<!--第一层--> <div class="first"> <div class="first_top"> <img ...
- JavaScript、全选反选-课堂笔记
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于input全选反选恶心的异常情况
上一篇讲到:第一次点击全选按钮input显示对勾,第二次则不显示,需要用prop来添加checked属性. 但是用prop会出现一个问题,对勾显示,而checked属性不会被添加(比如:$(" ...
- jQuery全选/反选checkbox
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python: jquery实现全选 反选 取消
引入这个jquery-1.12.4.js jquery实现全选 反选 取消 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...
- BootStrapt iCheck表单美化插件使用方法详解(含参数、事件等) 全选 反选
特色: 1.在不同浏览器(包括ie6+)和设备上都有相同的表现 — 包括 桌面和移动设备 2.支持触摸设备 — iOS.Android.BlackBerry.Windows Phone等系统 4.方便 ...
- jquery 全选 全不选 反选
1.概述 在项目中经常遇到列表中对复选框进行勾选操作,全选...反选.. 2. example <html> <body> <form id="test-for ...
随机推荐
- spring mybatis错误问题该怎么解决
1.org.apache.ibatis.exceptions.PersistenceExc org.apache.ibatis.exceptions.PersistenceException: ### ...
- 第一部分day4-三次登录实验、字符编码
#-----三次登录实验----- memu = { "陕西":{ "西安市":{ "新城区":["大明宫遗址",&qu ...
- pycharm与github的使用
1.clone代码: 输入github的存储库地址,输入本地存储目录,点击clone即可: 2.上传代码: 输入存储库名字,点击share即可:github上就会有你分享的代码啦
- Navicat Premium 12 永久使用办法
1.按步骤安装Navicat Premium,如果没有可以去官网下载:http://www.navicat.com.cn/download/navicat-premium 2.安装好后下载激活文件:h ...
- 201871010132-张潇潇-《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- Hyperparameters
参数是机器学习算法的关键.它们通常由过去的训练数据中总结得出.在经典的机器学习文献中,我们可以将模型看作假设,将参数视为对特定数据集的量身打造的假设. 模型是否具有固定或可变数量的参数决定了它是否可以 ...
- 基于zookeeper-3.5.5安装hadoop-3.1.2
目录 目录 1 1. 前言 3 2. 缩略语 3 3. 安装步骤 4 4. 下载安装包 4 5. 机器规划 4 6. 设置批量操作参数 5 7. 环境准备 5 7.1. 修改最大可打开文件数 5 7. ...
- md5-js加密
JS-MD5加密/html页面使用 大家都知道,传输明文信息很不安全,尤其像密码.卡号等这些敏感私密的信息,更不能暴露出去.在这里给大家介绍一种在前端JS中的MD5加密算法(因为要匹配的后台数据是MD ...
- 专题-主存储器与Cache的地址映射方式
2019/05/02 10:23 首先,我们注意到地址映射有三种:分别是直接地址映射.全相联映射.组相联映射. 首先我们搞清楚主存地址还有Cache地址的关系,还有组内地址的关系,常见我们的块内地址, ...
- css规范思维导图(仅限于自己)