C# 使用數(shù)據(jù)庫和MenuStrip動態(tài)生成菜單
C# 利用數(shù)據(jù)庫和MenuStrip控件動態(tài)生成菜單,設(shè)計如圖一,拖一個Menustrip控件。
設(shè)計實現(xiàn)如下:
1、數(shù)據(jù)庫設(shè)計:
2、數(shù)據(jù)庫數(shù)據(jù)插入
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系統(tǒng)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10000, 0, N'System', N'系統(tǒng)', N'系統(tǒng)')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系統(tǒng)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10020, 10000, N'-', N'-', N'-')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系統(tǒng)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10080, 10000, N'LogOut', N'切換帳號', N'切換帳號')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系統(tǒng)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10090, 10000, N'Exit', N'退出系統(tǒng)', N'退出系統(tǒng)')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系統(tǒng)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'ChangePassword.frmChangePassword', 1, 10010, 10000, N'ChangePassword', N'修改密碼', N'修改密碼')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基礎(chǔ)資料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 50000, 0, N'BasicSetting', N'基礎(chǔ)設(shè)置', N'基礎(chǔ)設(shè)置')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基礎(chǔ)資料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'BasicSetting.frmBasicSetting', 1, 50010, 50000, N'Basic Setting', N'基礎(chǔ)資料設(shè)置', N'基礎(chǔ)資料設(shè)置')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'測試界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 60000, 0, N'TEST Page', N'測試界面', N'測試界面')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'測試界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest', 1, 60010, 60000, N'TEST Page 1', N'測試界面1', N'測試界面1')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'測試界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest2', 1, 60020, 60000, N'TEST Page 2', N'測試界面2', N'測試界面2')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'測試界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest3', 1, 60030, 60000, N'TEST Page 3', N'測試界面3', N'測試界面3')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'測試界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest4', 1, 60040, 60000, N'TEST Page 4', N'測試界面4', N'測試界面4')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'測試界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest5', 1, 60050, 60000, N'TEST Page 5', N'測試界面5', N'測試界面5')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'測試界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest6', 1, 60060, 60000, N'TEST Page 6', N'測試界面6', N'測試界面6')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基礎(chǔ)資料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'BasicSetting.frmVenderInfo', 1, 50020, 50000, N'Vender Info', N'客戶檔案設(shè)置', N'客戶檔案設(shè)置')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基礎(chǔ)資料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'BasicSetting.frmMaterialInfo', 1, 50030, 50000, N'Material Info', N'產(chǎn)品檔案設(shè)置', N'產(chǎn)品檔案設(shè)置')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'測試界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.frmEncryp', 1, 60070, 60000, N'EncryOrDecry', N'加密解密', N'加密解密')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基礎(chǔ)資料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'BasicSetting.frmMaterialInfo2', 1, 50040, 50000, N'Material Info 2', N'產(chǎn)品檔案設(shè)置2', N'產(chǎn)品檔案設(shè)置2')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'條碼管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 70000, 0, N'BarCode Center', N'條碼管理中心', N'條碼管理中心')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'條碼管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'Printing.frmPrintTest1', 1, 70010, 70000, N'BarCode Test 1', N'條碼打印測試1', N'條碼打印測試1')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'條碼管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 10030, 10000, N'System Tools', N'系統(tǒng)工具', N'系統(tǒng)工具')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'條碼管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 10031, 10030, N'記事本', N'記事本', N'記事本')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'條碼管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 10032, 10030, N'計算器', N'計算器', N'計算器')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系統(tǒng)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10040, 10000, N'-', N'-', N'-')
C#代碼實現(xiàn)如下:
頁面LOAD事件:
private void frmMainFrame_Load(object sender, EventArgs e)
{
//加載菜單
LoadMenu2();
}
private void LoadMenu2()
{
//從數(shù)據(jù)庫獲取菜單列表
string sql = " SELECT T.MENU_I, T.MENU_J, T.EN_MENUNAME, T.CN_MENUNAME, T.TD_MENUNAME,webpage FROM DBO.MODULEFUNCTION_T T WHERE T.MODULENAME = '" + Application.ProductName + "' AND T.DISABLED = '1' ORDER BY T.MENU_J, T.MENU_I ";
DataTable dt = db.GetTableInfoBySQL(sql, db.sqlDB);
CreateMainMenu(MainMenuStrip, dt);
}
void CreateMainMenu(MenuStrip menuStrip, DataTable dt)
{
try
{
DataRow[] drs = dt.Select("MENU_J = '0'", "MENU_J");
if (drs.Length > 0)
{
foreach (DataRow item in drs)
{
ToolStripMenuItem mi = new ToolStripMenuItem();
mi.Text = item["CN_MENUNAME"].ToString();
CreateMenuItem(mi, item["MENU_I"].ToString(), dt);
menuStrip.Items.Add((ToolStripItem)mi);
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.Assert(false, ex.Message);
}
}
void CreateMenuItem(ToolStripMenuItem mi, string fatherid, DataTable dt)
{
DataRow[] drs = dt.Select("MENU_J='" + fatherid + "'", "MENU_J");
if (drs.Length > 0)
{
foreach (DataRow item in drs)
{
ToolStripMenuItem mitem = new ToolStripMenuItem();
mitem.Text = item["CN_MENUNAME"].ToString();
mitem.Tag = item;
CreateMenuItem(mitem, item["MENU_I"].ToString(), dt);
mi.DropDownItems.Add(mitem);
mitem.Click += new EventHandler(BindClickToInstinse);
}
}
}
void BindClickToInstinse(object sender, EventArgs e)
{
ToolStripMenuItem mi = sender as ToolStripMenuItem;
if (mi.HasDropDownItems)//如果有下一級目錄就不實例化
{
return;
}
DataRow dr = mi.Tag as DataRow;
//切換帳號
if (dr["CN_MENUNAME"].ToString() == "切換帳號")
{
Application.Restart();
}
//分隔線 不用管
if (dr["CN_MENUNAME"].ToString() == "-")
{
return;
}
//退出系統(tǒng)
if (dr["CN_MENUNAME"].ToString() == "退出系統(tǒng)")
{
DialogResult drt = new DialogResult();
drt = MessageBox.Show(this, "你確定要退出系統(tǒng)嗎", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (drt == DialogResult.Yes)
{
Application.Exit();
}
else
{
return;
}
}
//啟動記事本
if (dr["CN_MENUNAME"].ToString() == "記事本")
{
System.Diagnostics.Process.Start("notepad.exe");
return;
}
//啟動計算器
if (dr["CN_MENUNAME"].ToString() == "計算器")
{
System.Diagnostics.Process.Start("calc.exe");
return;
}
try
{
ObjectHandle t = Activator.CreateInstance(Application.ProductName, Application.ProductName + "." + dr["webpage"].ToString());
Form frm = (Form)t.Unwrap();
Form[] mdiChilds = this.MdiChildren;
if (mdiChilds.Length == 1)
{
mdiChilds[0].Close();
mdiChilds[0].Dispose();
}
frm.MdiParent = this;
frm.WindowState = FormWindowState.Maximized;
frm.Top = 0;
frm.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
圖一:設(shè)計頁面
圖二:效果圖: