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 ...
随机推荐
- [Ramda] Filter, Reject and Partition
We'll learn how to get a subset of an array by specifying items to include with filter, or items to ...
- RotateAnimation详解
其他构造器的旋转也可参考这副图. RotateAnimation旋转坐标系为以旋转点为坐标系(0,0)点.x轴为0度,顺时针方向旋转一定的角度. 1.RotateAnimation(fr ...
- 第三方Push服务:Urban Airship
转自:http://blog.csdn.net/kmyhy/article/details/7355756 关于推送通知,除了苹果的APNs之外,我们还有其它选择. Urban Airship就是其中 ...
- 终端I/O之终端标识
历史沿袭至今,在大多数UNIX系统中,控制终端的名字是/dev/tty. POSIX.1提供了一个运行时函数,可被用来确定控制终端的名字. #include <stdio.h> char ...
- 基于sqlite的Qt 数据库封装
[代码] mydata.h 10 #ifndef MYDATA_H 11 #define MYDATA_H 12 #include <QObject> 13 #include <QS ...
- Javascript Date原型方法
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...
- Android自定义控件:进度条的四种实现方式(Progress Wheel的解析)
最近一直在学习自定义控件,搜了许多大牛们Blog里分享的小教程,也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非 ...
- 如何成为apple开发者???
苹果开发者帐号申请流程如下 http://www.360doc.com/content/13/1029/12/11029609_325024387.shtml 苹果开发者账号分为 个人(individ ...
- iOS7.1 编译报错 解决方案 体会
iOS升级到 iOS 7.1 了 ,开发人员必须与时俱进.果断下载更新了xcode5.1版本 ,试运行了一下已上线的应用,哇 报错了!好头疼 贴下报错地方: 都是关于第三方类库报的错 比如parse. ...
- 【开源项目8】Android开源项目分类汇总【畜生级别】
欢迎大家推荐好的Android开源项目,可直接Commit或在 收集&提交页 中告诉我,欢迎Star.Fork :) 微博:Trinea 主页:www.trinea.cn 邮箱:t ...