public static void EnableMenu(System.Windows.Forms.MenuStrip menu)
{
//得到登录的用户对象
UserInfo user = GlobaoUser.GetInstance().LoginUser;
if (user.UserName == "admin")
{
return;
}
//获取用户的所有权限
DataTable dt = MenuService.GetUserMenuRole(user.UserId); int count = menu.Items.Count;
for (int i = 0; i < count; i++)
{
//得到主菜单的一级菜单
System.Windows.Forms.ToolStripItem item = menu.Items[i];
//如果一级菜单有权限访问,那么继续判断二级菜单。
if (EnableMenuItem(item as System.Windows.Forms.ToolStripDropDownItem, dt))
{
int ijcount = ((System.Windows.Forms.ToolStripMenuItem)item).DropDownItems.Count;
for (int j = 0; j < ijcount; j++)
{
// 到这就报 错误 未处理 System.ArgumentOutOfRangeException
//Message="索引超出范围。必须为非负值并小于集合大小。\r\n参数名: index"
EnableMenuItem(((System.Windows.Forms.ToolStripDropDownItem)item).DropDownItems[i] as System.Windows.Forms.ToolStripDropDownItem, dt);
}
}
else
{
//如果主菜单都没有权限访问那么,子菜单也不能访问
int ijcount2 = ((System.Windows.Forms.ToolStripMenuItem)item).DropDownItems.Count;
for (int j = 0; j < ijcount2; j++)
{
((System.Windows.Forms.ToolStripMenuItem)item).DropDownItems[j].Visible = false;
}
}
}
}
//禁用菜单项
private static bool EnableMenuItem(System.Windows.Forms.ToolStripDropDownItem item, DataTable menus)
{
for (int i = menus.Rows.Count - 1; i >= 0; i--)
{
if (item.Text.Trim() == "-")
{
item.Visible = true;
return true;
}
else if (item.Text.Trim().Replace(" ", "").Replace(" ", "").Equals(menus.Rows[i]["MenuName"].ToString().Trim()))
{
item.Visible = true;
return true;
}
}
item.Visible = false;
return false;
}
------------------------------------------------------
public static DataTable GetUserMenuRole(string userId)
{
string sql = "";
if (userId == "admin")
{
sql = @"SELECT MenuInfo.menuName FROM MenuInfo";
}
else {
sql = @"SELECT UserInfo.UserId, UserMenuInfo.MenuId,MenuInfo.menuName
FROM MenuInfo, UserInfo INNER JOIN UserMenuInfo ON UserInfo.UserId = UserMenuInfo.UserId " +
" WHERE (([menuInfo].[menuId]=[userMenuInfo].[menuId]) AND ([userinfo].[userid]=[usermenuInfo].[userid]) AND (UserInfo.UserId='" + userId + "')) ;"; }
return AccessHelper.GetDataTable(sql);
}-------------------------
数据
UserId MenuId
2009620161533 6001
2009620161533 6002
2009620161533 6MenuId menuName ParentMenuId
6 帮助 0
6001 帮助 6
6002 关于 6
高手们 看看哪出问题了。。
窗体上的菜单要比 数据库里面的菜单多
窗体上的菜单显示的跟数据库里面一样,部门数据库里面没有的菜单栏给隐藏了
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货