TreeView控件的展开与折叠
在窗体中添加一个TreeView控件,设置CheckBox属性为True,绑定数据
Archive jkj = new Archive();//自定义类
public void Bind()
{
DataTable rol = jkj.GetDataTable("select rolesid,description from roles","roles");
this.listBox1.DataSource = rol;
this.listBox1.DisplayMember = "description";
this.listBox1.ValueMember = "rolesid";
this.treeView1.Nodes.Clear();
DataTable mod = jkj.GetDataTable("select modelno,modelename from modelname", "modelname");
foreach (DataRow mrow in mod.Rows)
{
TreeNode mtn = new TreeNode();
mtn.Text = mrow["modelename"].ToString();
mtn.Tag = mrow["modelno"].ToString();
this.treeView1.Nodes.Add(mtn);
string sql = "select funcno,cname from funcname where modelno=" + int.Parse(mtn.Tag.ToString())+" order by funcno";
DataTable fun = jkj.GetDataTable(sql, "funcname");
foreach (DataRow frow in fun.Rows)
{
TreeNode ftn = new TreeNode();
ftn.Text = frow["cname"].ToString();
ftn.Tag = frow["funcno"].ToString();
mtn.Nodes.Add(ftn);
}
}
this.treeView1.ExpandAll();
}
private void Form1_Load(object sender, EventArgs e)
{
Bind();//绑定数据源
}
// 在TreeView控件的AfterCheck事件中加入:
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
TreeView tree = (TreeView)sender;
tree.AfterCheck -= new TreeViewEventHandler(this.treeView1_AfterCheck);
//折叠其他同级节点
TreeNode parentNode = e.Node.Parent;
if (parentNode != null)
{
foreach (TreeNode tn in parentNode.Nodes)
{
if (tn != e.Node)
tn.Collapse();
}
}
else
{
foreach (TreeNode tn in tree.Nodes)
{
if (tn != e.Node)
tn.Collapse();
}
}
//标记该节点的所有子节点的选中状态与该节点一致
foreach (TreeNode tn in e.Node.Nodes)
tn.Checked = e.Node.Checked;
//if (e.Node.Checked)
e.Node.ExpandAll(); //如果该节点为选中,展开该节点
//else
// e.Node.Toggle(); //如果该节点没有选中:如果该节点处于折叠状态,则展开该节点,否则折叠它
//如果当前节点的父节点下的所有子节点都没有选中,去掉父节点的选中
if (e.Node.Checked == false && e.Node.Parent != null)
{
bool found = false; //父节点的子节点中至少有一个节点被选中,则found = true
foreach (TreeNode tn in e.Node.Parent.Nodes)
{
if (tn.Checked == true)
{
found = true;
break;
}
}
if (found == false) //没有找到任何被选中的子节点
{
e.Node.Parent.Checked = false;
e.Node.Parent.Collapse();
}
}
tree.AfterCheck += new TreeViewEventHandler(this.treeView1_AfterCheck);
this.treeView1.FullRowSelect = true;
////下面的代码作用是:选取父节点后,选取其所有子节点。
//foreach (TreeNode tn in e.Node.Nodes)
//{
// tn.Checked = e.Node.Checked;
//}
}
TreeView控件的展开与折叠的更多相关文章
- C#Winform中treeView控件使用总结
1.如何展开结点时改变图标(注意:不是选中时) 要在目录中使用图标首先要加入一个控件ImageList(命名为imageList1),然后可以按图片的index或名称引用图片. 然后需要在TreeVi ...
- WPF之Treeview控件简单用法
TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...
- 创建TreeView控件
第一种方式 hwndTreeView=CreateWindow("SysTreeView32", NULL,WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS ...
- duilib进阶教程 -- TreeView控件(6)
代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...
- 在TreeView 控件上,如果双击任何一个节点的checkbox 只会收到一次After_Check事件 但是check属性变化两次(从false到true 再从true到false),请问该如何解决,谢谢!
在TreeView 控件上,如果双击任何一个节点的checkbox 只会收到一次After_Check事件 但是check属性变化两次(从false到true 再从true到false),请问该如何解 ...
- winform Treeview控件使用
做角色菜单权限时用到treeview控件做树状显示菜单,简单总结了一下用法: 1.在winform窗体中拖入treeview控件,注意修改属性CheckBoxes属性为true,即在节点旁显示复选框 ...
- 在TreeView控件节点中显示图片
实现效果: 知识运用: TreeView控件中Nodes集合的Add方法 //创建节点并将节点放入集合中 public virtual TreeNode Add (string key,string ...
- asp TreeView控件的使用
相对于之前发过一个TreeView控件的使用方法 本次利用js操作,页面无刷新,性能提高 Css编码可能时我的模板页样式被继承下来,导致页面变乱,不需要的可以去掉 前台 <style> . ...
- 部门树形结构,使用Treeview控件显示部门
部门树形结构.设计张部门表用于存储部门编码.名称.上级部门id,使用Treeview控件显示部门树,并实现部门增删改.移动.折叠等功能.特别提示,部门有层级关系,可用donetbar的adtree控件 ...
随机推荐
- grunt yoman bower的理解
grunt : 前端构建工具 1 什么事前端构建工具 目前前端已经开始了工程化 比如 一个项目 里面用到了几十个js文件 几十个css 很多图片资源 我们如果引入 还是按照以前的方式 out 因此这个 ...
- 洛谷 P1358 扑克牌
P1358 扑克牌 题目描述 组合数学是数学的重要组成部分,是一门研究离散对象的科学,它主要研究满足一定条件的组态(也称组合模型)的存在.计数以及构造等方面的问题.组合数学的主要内容有组合计数.组合设 ...
- 【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】
[144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bina ...
- jquery表格简单插件
1.一直对jquery插件感觉非常神奇.今天动手写了一个超级简单的案例. 2.效果 3.体会 a.jquery插件编写能力. 须要具备一定js能力的编写.还有写css样式的运用:希望以后这方面会有提高 ...
- css大会站点顶部的一个特效
看到http://css.w3ctech.com/ 上一个效果认为挺赞的. 然后学些了一下. demo地址:http://codepen.io/tianzi77/pen/mJaLWq html结构非常 ...
- JAVASE学习笔记:第十章 SWing经常使用控件类(二)
7.JComboBox 下拉列表 /* * 初始化下拉列表 */ public void addcomb(){ String[] area = {"山西省&qu ...
- Menu-actionBarMenu字体颜色修改
经常会遇到对menu字体颜色进行修改的情况,今天就遇到了一个.就是在action上有一个menu是黑色的,想要改成白色.方法如下 <style name="Email.Theme&qu ...
- Spark通过YARN提交任务不成功(包含YARN cluster和YARN client)
无论用YARN cluster和YARN client来跑,均会出现如下问题. [spark@master spark-1.6.1-bin-hadoop2.6]$ jps 2049 NameNode ...
- Node.js安装+环境配置【Windows版】
Node.js安装及环境配置之Windows篇 一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下 ...
- 设计模式六大原则(三):依赖倒置原则(Dependence Inversion Principle)
依赖倒置原则(DIP)定义: 高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来: 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码 ...