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控件 ...
随机推荐
- Markdown最简单常用的语法
1,文本强调: 文本倾斜,*我是倾斜的文本* 文本加粗,**我是加粗的文本** 文本删除线,~~带删除线的文本~~ 2,链接,分为行内式与参数式,参数式多用于在文章中多次使用相同的链接 行内式写法:[ ...
- 今日SGU 5.12
SGU 149 题意:求每一个点的距离最远距离的点的长度 收获:次大值和最大值,dfs #include<bits/stdc++.h> #define de(x) cout<< ...
- oracle 10g standby database 实时应用 redo 数据
-------physical standby database: real-time apply 须要配置 standby redo log: 启用实时应用, 日志应用服务会直接应用接收的redo ...
- 30.Node.js 全局对象
转自:http://www.runoob.com/nodejs/nodejs-module-system.html 学习要点: - __filename - __dirname - setTimeou ...
- 1.20 Python基础知识 - python常用模块-1
一.time和datetime 1.time模块 1)time.process_time() >>> import time >>> time.process_ti ...
- 鸟哥的Linux私房菜-----16、程序与资源管理
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- 2lession-文件访问
今天继续学习python,因为是根据网上的教程,里面用到了一些例子,包含有后面的知识点.但是,因为自己稍微有点c.java等语言基础,所以并没有严格按照教程来学习,反而是遇到知识点就记录下来. 代码如 ...
- Android学习笔记之滑动翻页(屏幕切换)
如何实现手机上手动滑动翻页效果呢?呵呵,在这里我们就给你们介绍一下吧. 一般实现这个特效会用到一个控件:ViewFlipper <1>View切换的控件—ViewFlipper 这个控件是 ...
- WebSocket兼容到低版本浏览器
就目前而言,WebSocket是最好的Web通信解决方案了.但是IE从10才开始兼容它,对于目前大量IE8存在的市场,原生的WebSocket显然不太实用,我们需要低版本兼容的解决方案.于是我模拟We ...
- JSON序列化和解析
1.JSON.stringfy()用于将 JavaScript 值转换为 JSON 字符串 2.JSON.parse()用于将一个 JSON 字符串转换为 JavaScript 对象. 3.JSON. ...