zoukankan      html  css  js  c++  java
  • 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;

                //}
            }

  • 相关阅读:
    【SSH网上商城项目实战11】查询和删除商品功能的实现
    【SSH网上商城项目实战10】商品类基本模块的搭建
    【SSH网上商城项目实战09】添加和更新商品类别功能的实现
    【SSH网上商城项目实战08】查询和删除商品类别功能的实现
    【SSH网上商城项目实战07】Struts2和Json的整合
    【SSH网上商城项目实战06】基于DataGrid的数据显示
    thinkphp模版主题使用方法
    sql语句中#{}和${}的区别
    SQL语句中有关单引号、双引号和加号的问题
    LEFT JOIN 关键字语法
  • 原文地址:https://www.cnblogs.com/chensuqian/p/9644827.html
Copyright © 2011-2022 走看看