在窗体中添加一个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;

//}
        }

转载于:https://www.cnblogs.com/chensuqian/p/9644827.html

TreeView控件的展开与折叠相关推荐

  1. android treeview 树形结构,前端开发中,使用TreeView控件创建树形结构

    原标题:前端开发中,使用TreeView控件创建树形结构 Wijmo是一款使用Type编写的新一代Java/HTML5控件集.它秉承触控优先的设计理念,在全球率先支持AngularJS,并提供性能卓越 ...

  2. 使用TreeView控件时订制树形收起、展开的个性图标

    在开发业务逻辑的应用时,TreeView树形控件经常被用到,系统默认显示展开.收起的图标为我们常见的+.-符号图标.如图: 那么如何订制自己的个性图标呢? 我们在MSDN上面可以找到,TreeView ...

  3. wpf展开树节点_WPF中展开一个TreeView控件的所有树节点

    在 Windows Form 应用中,我们碰到需要展开一个TreeView 控件的所有树节点的时候很简单,微软已经替我们提供了ExpandAll 方法,我们只要简单的一行代码tv_QTree.Expa ...

  4. C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标

    在C#系统应用毕设U盘防御软件中需要实现文件不可恢复的删除,首先需要实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录并加载相应图标.显示结果 ...

  5. java实现控件绑定数据源_控件(三)——TreeView控件以XmlDataSource控件为数据源实现简单的绑定...

    TreeView控件功能非常强大,今天,我们只是窥其一角. 我们实现的例子是:TreeView控件与XmlDataSource控件绑定,然后在网页显示选中项. 首先我们添加一个xml,取名为tv.xm ...

  6. TreeView 控件

    Windows 窗体 TreeView 控件以类似于在 Windows 资源管理器左窗格中显示文件和文件夹的方式显示节点的层次结构.每个节点可能包含称为子节点的其他节点.父节点或包含子节点的节点可以展 ...

  7. TreeView控件

    尽管一个典型的树结构只有一个根节点,但 TreeView 控件允许您向树结构中添加多个根节点.当您要显示项目列表,但不显示单个主根节点时(例如在产品类别列表中),这一功能很有用. 每个节点都具有一个 ...

  8. 网站导航(TreeView 控件)

    TreeView 是让人印象最深刻的导航控件之一,不仅因为它允许呈现富树视图,还因为它支持按需填入树的部分(不需要刷新整个页面).但最重要的是,它支持很多样式来改变它的外观. 通过几个基本的属性,可以 ...

  9. WPF 控件专题 TreeView控件详解

    1.TreeView介绍 命名空间:System.Windows.Controls TreeView 表示一个控件,该控件在树结构(其中的项可以展开和折叠)中显示分层数据. TreeView 是一个 ...

最新文章

  1. 漫画:有趣的“帽子问题”
  2. android开发 获取父控件的高宽
  3. 有趣的HTML5/CSS3艺术网站
  4. 使用tf.print()打印tensor内容
  5. spark streaming kafka Couldn't find leader
  6. typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库...
  7. 整数规划matlab实例,整数规划matlab
  8. html5游戏制作入门系列教程(八)
  9. Vue自定义指令—— 完美解决H5页面不同尺寸屏幕的适配问题
  10. 成功销售的六个关键步骤
  11. 明明安装了Java,但是Linux ROOT用户却找不到Java命令
  12. MATLAB 2017b 安装教程,这一篇文章就够了。强烈推荐!!!!!
  13. 『Python开发实战菜鸟教程』实战篇:一文带你了解人脸识别应用原理及手把手教学实现自己的人脸识别项目
  14. 基于can总线的A2L文件解析(1)
  15. R语言 PDF文件损坏或打不开
  16. linux探针,存活探针(Liveness)、就绪探针(Readiness)、启动探针(Startup)、容器钩子
  17. 最新浴血凤凰2020年DNF自动化辅助开发教程
  18. 每当此时的FreeEIM
  19. 数据结构图,图存储结构详解
  20. docker本地镜像下载及加载

热门文章

  1. 如何有效的压缩虚拟磁盘
  2. Android 启动界面的制作
  3. Go语言 读写锁互斥锁原理剖析(1)
  4. 微信小程序技巧-让特定组件首页始终展示修改编译条件即可,不用改json
  5. ASP.NET 应用程序遭遇Server Application Unavailable问题的解决的方法
  6. 01_常用 Linux 命令的基本使用
  7. About Gnu Linker2
  8. mysql-表完成性约束
  9. Linux安装软件包
  10. select,poll,epoll用法