TreeView控件的CheckBox级联选中或取消
背景:
在一个项目开发中遇到这样的要求:当选中树中一个节点时,需要同时选中其父节点,直至根节点。在取消一个节点的选中时,需要将其所有子节点取消选中,直至叶子节点。由于项目用户体验暂时可以不用考虑,直接想到用TreeView的TreeNodeCheckChanged事件,但是运行时发现一个问题,当改变一个节点的CheckBox的选中状态时,不会触发TreeNodeCheckChanged事件,只有在点击了某一个节点的文本后在触发一系列的事件。因此这条路行不通了,只好另寻其它方法了。
实现方法:
直接使用事件的方法不可行,那直接想到的方法是通过脚本实现,结合网络资源和业务要求整理了如下js脚本。
function postBackByObject() {
var element = window.event.srcElement;
if (element.tagName == "INPUT" && element.type == "checkbox") {
var checkedState = element.checked;
if (checkedState) {
while (element.tagName != "TABLE")
element = element.parentElement;
CheckWithParent(element);
}
else {
while (element.tagName != "TABLE")
element = element.parentElement;
UnCheckWithChilds(element);
}
}
}
//取消节点及其子节点(直至叶子节点)的选中状态。
function UnCheckWithChilds(table) {
if (table != null) {
Check(table, false);
var childDiv = table.nextSibling;
if (childDiv != null) {
if (childDiv.tagName == "DIV") {
var childs = childDiv.getElementsByTagName("table");
for (var i = 0; i < childs.length; i++) {
UnCheckWithChilds(childs[i]);
}
}
}
}
}
//选中节点及其父节点(直至根节点)。
//注:TreeView1 为TreeView控件的ID。
function CheckWithParent(table) {
if (table != null) {
Check(table, true);
var parentDiv = table.parentElement;
if (parentDiv.id == "TreeView1") {
return;
}
else {
var parentTable = parentDiv.previousSibling;
CheckWithParent(parentTable);
}
}
}
//修改节点的CheckBox状态。
function Check(table, checked) {
if (table != null) {
var checkboxIndex = table.rows[0].cells.length - 1;
var cell = table.rows[0].cells[checkboxIndex];
var checkboxes = cell.getElementsByTagName("INPUT");
if (checkboxes.length == 1)
checkboxes[0].checked = checked;
}
}
TreeView控件的CheckBox级联选中或取消的更多相关文章
- TreeView控件的展开与折叠
在窗体中添加一个TreeView控件,设置CheckBox属性为True,绑定数据 Archive jkj = new Archive();//自定义类 public void Bind ...
- WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色
本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html 在B/S开发中,对TreeView控件要改变当前选中节点的 ...
- 给C#的treeview控件的部分节点添加checkbox
一.先初始化treeview this.treeView1.CheckBoxes = true; this.treeView1.ShowLines = false; this.treeView1.Dr ...
- 在TreeView 控件上,如果双击任何一个节点的checkbox 只会收到一次After_Check事件 但是check属性变化两次(从false到true 再从true到false),请问该如何解决,谢谢!
在TreeView 控件上,如果双击任何一个节点的checkbox 只会收到一次After_Check事件 但是check属性变化两次(从false到true 再从true到false),请问该如何解 ...
- asp TreeView控件的使用
相对于之前发过一个TreeView控件的使用方法 本次利用js操作,页面无刷新,性能提高 Css编码可能时我的模板页样式被继承下来,导致页面变乱,不需要的可以去掉 前台 <style> . ...
- WPF 将数据源绑定到TreeView控件出现界面卡死的情况
首先来谈一下实现将自定义的类TreeMode绑定到TreeView控件上的一个基本的思路,由于每一个节点都要包含很多自定义的一些属性信息,因此我们需要将该类TreeMode进行封装,TreeView的 ...
- TreeView控件使用
treeView1.SelectedNode = treeView1.Nodes[0]; //选中当前treeview控件的根节点为当前节点添加子节点: TreeNode tmp; tmp = n ...
- 基于Treeview控件遍历本地磁盘
一.前言 Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配.ImageList控件用于提供小图片给TreeView控件,DatagridView通常显 ...
- Android控件之CheckBox(复选框控件)
一.有两种状态: 选中状态(true).未选中状态(false) 二.属性 android:id = "@+id/checkbox" android:layout_width=&q ...
随机推荐
- 大话设计模式C++实现-第22章-桥接模式
一.UML图 二.概念 桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都能够独立地变化. 三.说明 为什么叫"桥接模式"? 如上所看到的的UML图中,有一个聚合线, ...
- Python 初学笔记(转)
>>> print "isn't that grand"isn't that grand #不需要转义的#为了让文字符扩展到多行,可以在一行的末尾使用反斜线符号, ...
- 剑指 offer set 4 矩形覆盖
总结 1. 斐波那契数列的变形题, 但是稍有隐晦, 有点意思 2. 求解 f(3) 时, 最后一块矩形可以竖着放, 也可以两块矩形横着放, 分别对应于 f(2) 和 f(1) ------------ ...
- oc-15-枚举结构体
Cat.h #import <Foundation/Foundation.h> // 颜色的枚举 typedef enum{ ColorBlack, ColorYeallow } Colo ...
- IPC——匿名管道
Linux进程间通信——使用匿名管道 在前面,介绍了一种进程间的通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递的信息只是一个信号值.这里将介绍另一种进程间通信的方式——匿名管道,通过它 ...
- Java Web目录
1. Spring持久化 2. Spring核心之IoC——依赖注入 3. Hibernate查询语言 4. Hibernate 实体关联关系映射(转载) 5. 用MyEclipse自动生成hiber ...
- QMap与QHash
关联容器可以保存任意多个具有相同类型的项,且它们由一个键索引.Qt提供两个主要的关联容器类:QMap<K, T>和QHash<K, T>. QMap<K, T>是一 ...
- reactor官方文档译文(1)Reactor简介
原文地址:http://projectreactor.io/docs/reference/ Reactor简介 Reactor是一个基础库,用在构建实时数据流应用.要求有容错和低延迟至毫秒.纳秒.皮秒 ...
- 关于Android LayoutInflater的解释
LayoutInflater的作用就是动态加载xml布局好的界面,类似于findViewById()来获取已经定义好的控件一样.不同点是LayoutInflater是用来找res/layout/下的x ...
- Javascript Date原型方法
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...