C# TreeView選單,MenuStrip選單遞迴動態生成例子
這是在許可權系統中設計中常用到的兩種選單處理方式
private DataTable ModuleTable;
private void FrmMain_Load(object sender, EventArgs e)
{
try
{
InitMenu();
}
catch
{
MenuTree.Nodes.Clear();
}
}
///
/// 初始化選單
///
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);
}
///
/// 遞迴建立TreeView選單(模組列表)
///
/// 子選單
/// 子選單上級ID
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);
}
}
}
///
/// 遞迴建立MenuStrip選單(模組列表)
///
/// 父選單項
/// 父選單的ID
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);
}
}
}
private void FrmMain_Load(object sender, EventArgs e)
{
try
{
InitMenu();
}
catch
{
MenuTree.Nodes.Clear();
}
}
///
/// 初始化選單
///
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);
}
///
/// 遞迴建立TreeView選單(模組列表)
///
/// 子選單
/// 子選單上級ID
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);
}
}
}
///
/// 遞迴建立MenuStrip選單(模組列表)
///
/// 父選單項
/// 父選單的ID
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);
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-589269/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java從資料庫讀取選單,遞迴生成選單樹Java資料庫遞迴
- 基於jquery-treeview的動態選單實現jQueryView
- Vue 遞迴多級選單Vue遞迴
- php短視訊原始碼,vue遞迴動態載入選單PHP原始碼Vue遞迴
- 基於vue.ant.design的單檔案方式遞迴生成選單Vue遞迴
- Java實現多級選單(遞迴)Java遞迴
- 如何快速、且易懂編寫Java遞迴生成樹形選單結構Java遞迴
- CSS 動態導航選單CSS
- Vue遞迴元件實現樹形結構選單Vue遞迴元件
- elementUI 多級選單動態渲染UI
- JavaScript動態操作select下拉選單JavaScript
- React Router、And、Redux動態選單和動態路由ReactRedux路由
- Vue的動態選單無法登入(無法載入選單)Vue
- .Net Core Razor動態選單實現
- el-menu使用遞迴元件實現多級選單元件遞迴元件
- 使用遞迴實現樹狀選單(無限級分類)遞迴
- C# winfrom省份和城市 下拉選單聯動C#
- 簡單C#遞迴(向前查詢上工序)C#遞迴
- (系列十四)Vue3+WebApi 搭建動態選單VueWebAPI
- vue 動態載入路由,渲染左側選單欄Vue路由
- WPF TreeView級聯複選View
- vue 動態選單以及動態路由載入、重新整理採的坑Vue路由
- .net core3.1 abp動態選單和動態許可權(思路) (二)
- 樹開下拉選單資料來源生成
- 導航選單(動畫)--- jQuery動畫jQuery
- C#遞迴C#遞迴
- 【C#】【DevExpress】自定義單元格右鍵選單,去除單元格編輯時,載入系統的預設選單C#devExpress
- jq 單選多選 && 多選限制
- 單選多選按鈕
- 關於自動化平臺的動態選單設計(二)
- JavaGUI——swing元件基礎(八)選單欄/選單/子選單元件JMenuBar/JMenu/JMenuItemJavaGUI元件
- 將Xml檔案遞迴載入到TreeView中XML遞迴View
- 迴圈方式為select下拉選單新增年份
- kendoUI 多選下拉選單 kendoMultiSelectUI
- Ubuntu 修改預設啟動選單Ubuntu
- 下拉選單框和滾動條
- (系列十)Vue3中選單和路由的結合使用,實現選單的動態切換(附原始碼)Vue路由原始碼
- SAAS雲平臺搭建札記: (三) AntDesign + .Net Core WebAPI許可權控制、動態選單的生成WebAPI
- vxe-table 單選、實現表格單選資料