在窗体中添加一个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控件的展开与折叠的更多相关文章

  1. C#Winform中treeView控件使用总结

    1.如何展开结点时改变图标(注意:不是选中时) 要在目录中使用图标首先要加入一个控件ImageList(命名为imageList1),然后可以按图片的index或名称引用图片. 然后需要在TreeVi ...

  2. WPF之Treeview控件简单用法

    TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...

  3. 创建TreeView控件

    第一种方式 hwndTreeView=CreateWindow("SysTreeView32", NULL,WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS ...

  4. duilib进阶教程 -- TreeView控件(6)

    代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...

  5. 在TreeView 控件上,如果双击任何一个节点的checkbox 只会收到一次After_Check事件 但是check属性变化两次(从false到true 再从true到false),请问该如何解决,谢谢!

    在TreeView 控件上,如果双击任何一个节点的checkbox 只会收到一次After_Check事件 但是check属性变化两次(从false到true 再从true到false),请问该如何解 ...

  6. winform Treeview控件使用

    做角色菜单权限时用到treeview控件做树状显示菜单,简单总结了一下用法: 1.在winform窗体中拖入treeview控件,注意修改属性CheckBoxes属性为true,即在节点旁显示复选框 ...

  7. 在TreeView控件节点中显示图片

    实现效果: 知识运用: TreeView控件中Nodes集合的Add方法 //创建节点并将节点放入集合中 public virtual TreeNode Add (string key,string ...

  8. asp TreeView控件的使用

    相对于之前发过一个TreeView控件的使用方法 本次利用js操作,页面无刷新,性能提高 Css编码可能时我的模板页样式被继承下来,导致页面变乱,不需要的可以去掉 前台 <style> . ...

  9. 部门树形结构,使用Treeview控件显示部门

    部门树形结构.设计张部门表用于存储部门编码.名称.上级部门id,使用Treeview控件显示部门树,并实现部门增删改.移动.折叠等功能.特别提示,部门有层级关系,可用donetbar的adtree控件 ...

随机推荐

  1. ToString DateTime 操作

    来源:网络 字符型转换为字符串// C 货币 2.5.ToString("C"); // ¥2.50 // D 10进制数 25.ToString("D5"); ...

  2. fc---输出历史命令列表

    fc指令 fc指令可以用于输出历史命令列表,也可以通过调用vi编辑器对历史指令内容进行编辑输出. 语法: fc [-e ename] [-lnr] [first] [last] 选项: -l:显示历史 ...

  3. 深入了解Linux远程桌面

    本文转载于:http://www.linux521.com/2009/system/201004/11001.html 已发表在<网管员世界>2010年3月杂志             本 ...

  4. 杠杆(leverage)就是支付保证金借钱进行交易,以小博大

    杠杆(leverage)就是支付保证金借钱进行交易,以小博大: 比如你自己有100块,在向券商借100块,这就是杠杆交易了,杠杆简单地说来就是一个乘号,使用这个工具,可以放大投资的结果,无论最终的结果 ...

  5. BZOJ2555: SubString(后缀自动机,LCT维护Parent树)

    Description 懒得写背景了,给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支 ...

  6. 手动挂接NFS

     环境: 单板:s3c2440 内核:Linux-2.6.22.6 U-boot1.16 初始根文件系统Yaffs2 前提条件 1. 开发板上要烧写好文件系统 2. 能正常开机进入Linux系统 3. ...

  7. vue.js提交按钮时简单的if判断表达式示例

    简单的业务需求如下,看图说话 1:当充值金额没有填写的时候,会有Toast小弹框提示"请输入有效的充值金额" if (!this.money) { console.log('mon ...

  8. 【例题 8-7 UVA - 11572】Unique Snowflakes

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 类似尺取法. 用set判断这段区间有没有重复的数字. 有的话,就把头节点的那个数字删掉,直到没有为止. [代码] /* 1.Shou ...

  9. animation- 动画效果实现(代码中)

    1,首先我们看一下如下的代码 import android.view.animation.LayoutAnimationController; import android.view.animatio ...

  10. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...