我的数据库结构如下
表菜单>>
菜单 ID、菜单名称、链接路径、菜单描述、菜单位置、IsParent、子 ID
我正在母版页的运行时获取项目,并希望使用我所需的 CSS 类正确显示项目,但仅显示顶级(所有项目)。现在我想将子菜单项也显示为下拉菜单。请建议您使用 ASP.NET 和 C# 实现这一点的方法。
-约翰·巴特
我在这里所做的是创建了两个方法并使用了菜单控件。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadMenu();
}
}
void LoadMenu()
{
DataTable dt = this.GetData(0);
PopulateMenu(dt, 0, null);
}
private DataTable GetData(int ParentMenuItem)
{
string query = "SELECT MenuID, MenuItemID,ParentMenuItem,ItemName,MenuURL,MenuRemarks,ItemPosition FROM [MenuItems] WHERE ParentMenuItem = @ParentMenuItem AND Visibility=1 ORDER BY ItemPosition ASC";
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConToCMS"].ConnectionString);
SqlDataAdapter adp = new SqlDataAdapter(query, con);
DataTable dt = new DataTable();
adp.SelectCommand.CommandType = CommandType.Text;
adp.SelectCommand.Parameters.AddWithValue("@ParentMenuItem", ParentMenuItem);
try
{
adp.Fill(dt);
}
catch (Exception ex)
{
throw ex;
}
return dt;
}
private void PopulateMenu(DataTable dt, int ParentMenuItem, MenuItem parentMenuItem)
{
string currentPage = Path.GetFileName(Request.Url.AbsolutePath);
foreach (DataRow row in dt.Rows)
{
MenuItem menuItem = new MenuItem
{
Value = row["MenuItemId"].ToString(),
Text = row["ItemName"].ToString(),
NavigateUrl = row["MenuURL"].ToString(),
Selected = row["MenuURL"].ToString().EndsWith(currentPage, StringComparison.CurrentCultureIgnoreCase)
};
if (ParentMenuItem == 0)
{
MainMenu.Items.Add(menuItem);
DataTable dtChild = this.GetData(int.Parse(menuItem.Value));
PopulateMenu(dtChild, int.Parse(menuItem.Value), menuItem);
}
else
{
parentMenuItem.ChildItems.Add(menuItem);
}
}
}