C# TreeView菜单,MenuStrip菜单递归动态生成例子

来源:互联网 发布:塞尔维亚三大球 知乎 编辑:程序博客网 时间:2024/05/07 22:37
private DataTable ModuleTable;


 private void FrmMain_Load(object sender, EventArgs e)
        {
   
                try
                {
                    InitMenu();
                }
                catch
                {
                    MenuTree.Nodes.Clear();
                }





    /// <summary>
        /// 初始化菜单
        /// </summary>
        protected void InitMenu()
        {
            DataSet ds= new DataSet();
            ds=bll.GetModuleTypeList("");
            RGP.BLL.RGP_Modules bll = new RGP.BLL.RGP_Modules();
            ModuleTable = ds.Tables[0];  //取得所有数据得到DataTable 


            //加载TreeView菜单
            LoadNode(MenuTree.Nodes, "0");


            //加载MenuStrip菜单
            ToolStripMenuItem topMenu = new ToolStripMenuItem();
            LoadSubMenu(ref topMenu, 0);


        }


        /// <summary>
        /// 递归创建TreeView菜单(模块列表)
        /// </summary>
        /// <param name="node">子菜单</param>
        /// <param name="MtID">子菜单上级ID</param>
        protected void LoadNode(TreeNodeCollection node, string MtID)
        {
            DataView dvList = new DataView(ModuleTable);
            dvList.RowFilter = "ModuleTypeSuperiorID=" + MtID;  //过滤父节点 
            TreeNode nodeTemp;
            foreach (DataRowView dv in dvList)
            {
                nodeTemp = new TreeNode();
                nodeTemp.Tag = dv["ModuleTypeID"].ToString() + ",0";
                nodeTemp.Text = dv["ModuleTypeName"].ToString();  //节点名称                 
                node.Add(nodeTemp);  //加入节点 
                //nodeTemp.SelectAction = TreeNodeSelectAction.Expand;
                //nodeTemp.Expanded = false;


                this.LoadNode(nodeTemp.Nodes, nodeTemp.Tag.ToString().Split(',')[0]);  //递归 


                //增加子模块分类
                RGP.BLL.RGP_Modules bll = new RGP.BLL.RGP_Modules();
                DataSet Module = bll.GetModuleList("ModuleTypeID=" + dv["ModuleTypeID"].ToString());
                int i = 0;
                foreach (DataRow child_dr in Module.Tables[0].Rows)
                {
                    if ((UserBox.GetUserTable().IsLimit == true
                            || (child_dr["ModuleDisabled"].ToString().ToLower() == "true"
                            && UserHandle.ValidationModule(int.Parse(child_dr["ModuleID"].ToString()), RGP_Tag.Browse)))
                            && child_dr["IsMenu"].ToString().ToLower() == "true")
                    {
                        TreeNode ChildNode = new TreeNode(child_dr["ModuleName"].ToString());
                        ChildNode.Tag = child_dr["ModuleID"].ToString() + ",1";
                        ChildNode.Expand();
                        nodeTemp.Nodes.Add(ChildNode);
                        i++;
                    }
                }


                //删除不必要的模块分类节点。
                if (i == 0)
                {
                    MenuTree.Nodes.Remove(nodeTemp);
                }
            }
        }


        /// <summary>
        /// 递归创建MenuStrip菜单(模块列表)
        /// </summary>
        /// <param name="topMenu">父菜单项</param>
        /// <param name="ItemID">父菜单的ID</param>
        private void LoadSubMenu(ref ToolStripMenuItem topMenu, int MtID)
        {
            DataView dvList = new DataView(ModuleTable);
            //过滤出当前父菜单下在所有子菜单数据(仅为下一层的)
            dvList.RowFilter = "ModuleTypeSuperiorID=" + MtID.ToString();
            ToolStripMenuItem subMenu;
            foreach (DataRowView dv in dvList)
            {
                //创建子菜单项
                subMenu = new ToolStripMenuItem();
                subMenu.Text = dv["ModuleTypeName"].ToString();
                //判断是否为顶级菜单
                if (MtID == 0)
                {
                    this.SysMainMenu.Items.Add(subMenu);
                }
                else
                {
                    topMenu.DropDownItems.Add(subMenu);
                }


                //递归调用
                LoadSubMenu(ref subMenu, Convert.ToInt32(dv["ModuleTypeID"]));


                //增加子模块分类
                RGP.BLL.RGP_Modules bll = new RGP.BLL.RGP_Modules();
                DataSet Module = bll.GetModuleList("ModuleTypeID=" + dv["ModuleTypeID"].ToString());
                int i = 0;
                foreach (DataRow child_dr in Module.Tables[0].Rows)
                {
                    if ((UserBox.GetUserTable().IsLimit == true
                            || (child_dr["ModuleDisabled"].ToString().ToLower() == "true"
                            && UserHandle.ValidationModule(int.Parse(child_dr["ModuleID"].ToString()), RGP_Tag.Browse)))
                            && child_dr["IsMenu"].ToString().ToLower() == "true")
                    {
                        ToolStripMenuItem ChildMenu = new ToolStripMenuItem(child_dr["ModuleName"].ToString());
                        subMenu.DropDownItems.Add(ChildMenu);
                        i++;
                    }
                }




                //删除不必要的模块分类节点。
                if (i == 0)
                {
                    this.SysMainMenu.Items.Remove(subMenu);
                }
            }
        }
0 0
原创粉丝点击