winform下的treeview的加载和checkbox的设置

来源:互联网 发布:世界大数据公司排名 编辑:程序博客网 时间:2024/04/30 11:11

参照了网上的一些教程自己弄了个完整点的代码

/// <summary>
        /// 设置菜单树
        /// </summary>
        private void SetMenu()
        {
            DataTable dtMenu = new DataTable();
            dtMenu = SysManager.GetMenu("", "");
            treeMenu.CheckBoxes = true;
            //创建菜单树
            CreateTreeView(treeMenu.Nodes, dtMenu, 0);
            treeMenu.ExpandAll();
        }

        /// <summary>
        /// 创建treeView
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="dt"></param>
        /// <param name="intMenuID"></param>
        private void CreateTreeView(TreeNodeCollection nodes, DataTable dt, int intMenuID)
        {
            //过滤条件
            string strFilter = string.Empty;
            strFilter = string.Format("AM_PID={0}", intMenuID);
            DataRow[] arrDR = dt.Select(strFilter);
            foreach (DataRow dr in arrDR)
            {
                TreeNode node = new TreeNode();
                node.Text = (string)dr["AM_TEXT_CH"];
                node.Tag = Convert.ToInt32(dr["AM_CID"]);
                nodes.Add(node);
                CreateTreeView(node.Nodes, dt, Convert.ToInt32(node.Tag));
            }

        }

        /// <summary>
        /// 系列节点 Checked 属性控制
        /// </summary>
        /// <param name="e"></param>
        private void CheckControl(TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown)
            {
                if (e.Node != null)
                {
                    CheckParentNode(e.Node, e.Node.Checked);
                }
                if (e.Node.Nodes.Count > 0)
                {
                    CheckAllChildNodes(e.Node, e.Node.Checked);
                }
            }
        }

        /// <summary>
        /// 改变所有子节点的状态
        /// </summary>
        /// <param name="pn"></param>
        /// <param name="IsChecked"></param>
        private void CheckAllChildNodes(TreeNode pn, bool IsChecked)
        {
            foreach (TreeNode tn in pn.Nodes)
            {
                tn.Checked = IsChecked;
                if (tn.Nodes.Count > 0)
                {
                    CheckAllChildNodes(tn, IsChecked);
                }
            }
        }

        /// <summary>
        /// 改变父节点的选中状态
        /// </summary>
        /// <param name="curNode"></param>
        /// <param name="IsChecked"></param>
        private void CheckParentNode(TreeNode curNode, bool IsChecked)
        {
            bool bChecked = true;
            if (curNode.Parent != null)
            {
                foreach (TreeNode node in curNode.Parent.Nodes)
                {
                    if (node.Checked == false)
                    {
                        bChecked = false;
                        break;
                    }
                }
                if (bChecked)
                {
                    curNode.Parent.Checked = true;
                    CheckParentNode(curNode.Parent, true);
                }
                else
                {
                    curNode.Parent.Checked = true;
                    CheckParentNode(curNode.Parent, true);
                }
            }
        }

        public RoleMenu()
        {
            InitializeComponent();
        }

        private void RoleMenu_Load(object sender, EventArgs e)
        {
            SysManager = (SystemManager)ServiceLocator.FindService("SystemManager");
            //加载菜单树
            SetMenu();
           
        }

        private void treeMenu_AfterCheck(object sender, TreeViewEventArgs e)
        {
            CheckControl(e);
        }

原创粉丝点击