Menu 是另一个支持层次化数据的富控件。它可以绑定到数据源(声明性的)或编程使用 MenuItem 对象来填充。

       MenuItem 类不像 TreeNode 类那样丰富,它不支持复选框,也不能通过编程设置它们的 折叠/展开 状态。不过,它们也有很多相似的属性,包括那些用于设置图片、确定条目是否可选以及指定目标链接的属性。

MenuItem 的属性:

Text 菜单中显示的文字
TooTip 鼠标停留菜单项时的提示文字
Value 保存不显示的额外数据(比如某些程序需要用到的 ID)
NavigateUrl 如果设置了值,单击节点会前进至此 Url。否则,需要响应 Menu.MenuItemClick事件确定要执行的活动
Target 它设置了链接的目标窗口或框架。Menu 自身也暴露了 Target 属性设置所有的 MenuItem 实例的默认目标
Selectable 如果为 false,菜单项不可选。通常只在菜单项有一些可选的子菜单项时,才设为 false
ImageUrl 菜单项旁边的图片
PopOutImageUrl 菜单项包含子项时现在在菜单项旁的图片,默认是一个小的实心箭头
SeparatorImageUrl 菜单项下面显示的图片,用于分隔菜单项

 

       和遍历 TreeView 结构的方式相同,Menu 控件仅做很小的改动,几乎就可以重用先前 TreeView 的代码:

object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DataSet ds = GetProductsAndCategories();
 
        foreach (DataRow row in ds.Tables["Categories"].Rows)
        {
            MenuItem itemCategory = new MenuItem(
                row["CategoryName"].ToString(),
                row["CategoryID"].ToString());
            Menu1.Items.Add(itemCategory);
 
            DataRow[] childRows = row.GetChildRows(ds.Relations["CatProds"]);
            foreach (DataRow childRow in childRows)
            {
                MenuItem itemProduct = new MenuItem(
                    childRow["ProductName"].ToString(),
                    childRow["ProductID"].ToString());
                itemCategory.ChildItems.Add(itemProduct);
            }
        }
    }
 
}
 
protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
{
    if (Menu1.SelectedItem.Depth == 0)
    {
        lblInfo.Text = "You selected Category ID: ";
    }
    else if (Menu1.SelectedItem.Depth == 1)
    {
        lblInfo.Text = "You selected Product ID: ";
    }
    lblInfo.Text += Menu1.SelectedItem.Value;
}

相关文章: