使用TreeView 使用多选功能
1.要用TreeView多选就要显示复选框,TreeView默认不显示复选框,显示复选框: TreeView2.ShowCheckBoxes = TreeNodeTypes.All;
初始化TreeView
for (int i = 0; i < 3; i++)
{
TreeNode node = new TreeNode("父节点" + i, i.ToString()); //node.SelectAction += TreeView1_TreeNodeCheckChanged;
TreeView1.Nodes.Add(node);
for (int j = 0; j < 4; j++)
{
TreeNode childNode = new TreeNode("子节点" + j, j.ToString());
node.ChildNodes.Add(childNode); if (j == 0)
{
childNode.ChildNodes.Add(new TreeNode("子节点" + 1, "1"));
}
}
} TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
效果:
2.显示了复选框之后,多选代码
//选中节点之后,选中节点的所有子节点
private void setChildNodeCheckedState(TreeNode currNode, bool state)
{
TreeNodeCollection nodes = currNode.ChildNodes;
if (nodes.Count > 0)
foreach (TreeNode tn in nodes)
{ tn.Checked = state;
setChildNodeCheckedState(tn, state);
}
} //取消节点选中状态之后,取消所有父节点的选中状态
private void setParentNodeCheckedState(TreeNode currNode, bool state)
{
TreeNode parentNode = currNode.Parent; parentNode.Checked = state;
if (currNode.Parent.Parent != null)
{
setParentNodeCheckedState(currNode.Parent, state);
}
} protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
if (e.Node.Checked)
{
//节点勾选之后,勾选所有的子节点
setChildNodeCheckedState(e.Node, true);
if (e.Node.Parent != null)//检查同级的节点是否都勾选,都勾选了则勾选父节点
{
bool allChildNodeChecked =true ;
foreach (TreeNode node in e.Node.ChildNodes)
{
if (!node.Checked)
{
allChildNodeChecked = false;
break;
}
} if (allChildNodeChecked)
setParentNodeCheckedState(e.Node, true);
} }
else
{
//取消节点选中状态之后,取消所有父节点的选中状态
setChildNodeCheckedState(e.Node, false);
//如果节点存在父节点,取消父节点的选中状态
if (e.Node.Parent != null)
{
setParentNodeCheckedState(e.Node, false);
}
}
}
本来以为写了上面的代码点击复选框就可以勾选对应的子节点了,但是我错了。TreeView 只有点击节点上的文字才会触发TreeView1_TreeNodeCheckChanged事件,点击复选框没用,需要用到以下代码:
function postBackByObject() {
__doPostBack("UpdatePanel1", ""); //此处前面是两个下划线(UpdatePanel1处是因为用了UpdatePanel所以才写这个控件ID的)
}
$(document).ready(function () {
// $("input[type='checkbox']").bind("click", CheckSub);
// $("input[type='checkbox']").bind("click", postBackByObject);
$("[id^='MainContent_TreeView1'][id$='CheckBox']").bind("click", postBackByObject); //所有id以MainContent_TreeView1开头,以CheckBox结尾的元素
});
上面虽然基本的功能要求都实现了,但是每次点击checkbox页面回发的时,页面都会跑到最顶端,致使勾选页面底部的checkbox的时候又要重新把滚动条拉倒底部,为了刷新页面是维持滚动条的位置可以在.aspx页面
<page>标签里加一句 MaintainScrollPositionOnPostback="true" 即可
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" %>
至此大功告成!
网上也有用如下方法的,但是我发现此方法在点击节点前面的加减号的时候也会触发上面的代码,导致点击+/-号时有问题
protected void Page_Load(object sender, EventArgs e)
{
TreeView1.Attributes.Add("onclick", "postBackByObject()"); } protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
//string str=e.Node.ValuePath; //其他处理代码
} aspx中: <head runat="server"> <script type="text/JavaScript">
function postBackByObject()
{
__doPostBack("","");
}
</script> </head>
以上代码来自http://blog.csdn.net/sl159/article/details/7921920
有一中改进的写入如下,但是Firefox不支持类似的var o = window.event.srcElement;的写法,(IE没问题),所以也没有用到
// 点击复选框时触发事件(此事件会引起回发)
function postBackByObject()
{
var o = window.event.srcElement;
if (o.tagName == "INPUT" && o.type == "checkbox")
{
__doPostBack("UpdatePanel1",""); //此处前面是两个下划线(UpdatePanel1处是因为用了UpdatePanel所以才写这个控件ID的)
}
}
摘抄于http://www.cnblogs.com/ranlin/archive/2011/08/07/2129874.html
使用TreeView 使用多选功能的更多相关文章
- CheckedListBoxControl 实现复选框的单选与多选功能
由于工作需要,需要实现复选框的单选与多选功能,找了好多资料都不是很全,经过两天苦苦的挖挖挖,终于完成啦O(∩_∩)O哈哈~ 用DEV控件中的CheckedListBoxControl控件,当然VS中的 ...
- js初学—实现checkbox全选功能
布局如下: <p ><input type="checkbox" id="che1"/>全选</p><div id=& ...
- C# winform中的datagridview控件标头加入checkbox,实现全选功能。
/// <summary> /// 给DataGridView添加全选 /// </summary> public class AddCheckBoxToDataGridVie ...
- jquery实现全选功能
主要是模拟一些网页中的表格实现全选功能. <form> 你爱好的运动是: <input type="checkbox" id="Check" ...
- Form - CHECKBOX全选功能
FORM BUILDER开发,遇到这样一个需求: 添加一个CHECKBOX完成全选功能,红框为新添加的CHECKBOX(如图示) Try to use APP_RECORD.FOR_ALL_RECOR ...
- QComboBox实现复选功能
需求: 下拉列表有复选功能 不可编辑 显示所有选中项 关于QComboBox的复选功能有几种方案: QStandardItemModel + QStandardItem QListWidget + ...
- jQuery实现的全选、反选和不选功能
适用于网页多选后需要进行批量操作的场景(如批量删除等).如有问题希望大家可以指正.谢谢~~ HTML 我们的页面上有一个歌曲列表,列出多行歌曲名称,并匹配复选框供用户选择,并且在列表下方有一排操作按钮 ...
- iOS中的界面多选功能--(UICollectionView)
文/Jacob_Pan(简书作者)原文链接:http://www.jianshu.com/p/9d28ebd0f5a2著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 最近做项目接触了一 ...
- Flex 扩展combobox 实现复选功能
前段时间,老大召唤,给个任务,研究一下flex的combobox控件 实现复选功能(flex自带的combobox控件不可以复选),小兵能力有限,哪里可以扩展呀,网上看了别人写的,发现总是有点瑕疵(关 ...
随机推荐
- MIS系统开发利器,实施、维护人员自定义报表的福音,AgileEAS.NET SOA平台动态报表指南
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- Python学习笔记(三)——类型与变量
一.输入与输出 print("string"); print("string1","string2","string3" ...
- Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)
来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...
- HDU 2082 找单词 (多重背包)
题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...
- 图文:通过sql server 连接mysql
1.在SQL SERVER服务器上安装MYSQL ODBC驱动; 驱动下载地址:http://dev.mysql.com/downloads/connector/odbc/ 2.安装好后,在管理工具- ...
- ScrollView控件实现屏幕滚动
滚动视图是指当拥有很多内容,屏幕显示不完全时,需要通过滚动来显示完整的视图 ScrollView的种类: (1)水平滚动视图:HorizontalScrollView (2)垂直滚动视图:Scroll ...
- uva12546. LCM Pair Sum
uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...
- NSDateFormatter 相关理解
Formatter译为格式,相应的NSDateFormatter就相当于是NSDate的转换类,将NSDate转换为另一种格式,或转换回来.NSDate没有自己的输出,需要借助NSDateFormat ...
- [ACM训练] 数据结构----树、二叉树----c++ && python
树结构,尤其是二叉树结构是算法中常遇见的,这里根据学习过程做一个总结. 二叉树所涉及到的知识点有:满二叉树与完全二叉树.节点数目的关系.节点数与二叉树高度的关系.层次遍历.深度优先遍历.广度优先遍历等 ...
- js判断是iOS还是Android
<script type="text/javascript"> var ua = navigator.userAgent.toLowerCase(); if (/iph ...