C# TreeView菜单,MenuStrip菜单递归动态生成例子
2010-11-22 21:16
531 查看
转载自:/article/5015665.html
这是在权限系统中设计中常用到的两种菜单处理方式
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); } } }
这是在权限系统中设计中常用到的两种菜单处理方式
相关文章推荐
- C# TreeView菜单,MenuStrip菜单递归动态生成例子
- C# TreeView菜单,MenuStrip菜单递归动态生成例子
- C# TreeView菜单,MenuStrip菜单递归动态生成例子
- C# TreeView菜单,MenuStrip菜单递归动态生成例子
- C# WinForm 用MenuStrip动态生成菜单并动态加载事件
- [C#]读取数据库,动态生成TreeView[递归]
- C# 使用数据库和MenuStrip动态生成菜单
- IList接口数据动态、递归生成TreeView
- c#:Dataset读取XML文件动态生成菜单
- 用C#从数据库动态生成AdminLTE菜单的一种方法
- vba treeview动态生成,及递归选中checkbox
- C# 递归显示 TreeView 树状菜单树!
- asp.net TreeView递归循环子节点生成树形菜单实例
- PB中实现菜单的动态生成(函数递归实现)
- C# 利用xml动态生成带图标菜单
- C# 回顾简单XML动态递归绑定TreeView
- C#树状视图动态加载Menustrip导航菜单
- 用C#从数据库动态生成AdminLTE菜单的一种方法
- C# TreeView 中递归生成树(二)