菜单导航类似于http://www.nopcommerce-demo.com/Default.aspx 分类Categories导航 注意是从数据库里选出。
当单击computers从数据库里读取它的子类desktops,notebooks等等显示在下面 请大家帮帮忙 一直想做这个导航,先谢谢大家了

解决方案 »

  1.   

    你去www.cnblogs.com看看金色海洋写的一个专题----自定义的角色权限
      

  2.   

    这个其实原理和treeview差不多..同样用到递归取数据,取子类,实现无限级要类.在网上找一下treeview的那些参考代码.再变换到你那种导航上来
      

  3.   

    .net 3.5框架下用linq可以直接将数据库中读取的内容...进行灵活使用...来最终最为一个datasource来使用...
      

  4.   


    这是我自己写的一个Menu控件,从数据库中读取的。
    效果如下://动态生成菜单
                //添加“首页”菜单
                MenuItem itemshouye = new MenuItem();
                itemshouye.Text = "首页 ";
                itemshouye.NavigateUrl = "Default.aspx";
                itemshouye.Target = "_blank";
                Menu1.Items.Add(itemshouye);
                bjs007.typeDataTable typetable = tb.gettype();//这里是顶级菜单的DataTable
                for (int i = 0; i < typetable.Rows.Count; i++)
                {
                    bjs007.typeRow typerow=(bjs007.typeRow)typetable.Rows[i];
                    MenuItem item = new MenuItem();
                    item.Text = typerow.type.Trim();
                    item.Target = "_blank";
                    if (typerow.moban != "type.aspx")
                    {
                        item.NavigateUrl = typerow.moban;
                    }
                    else
                    {
                        item.NavigateUrl = typerow.moban + "?typeid=" + typerow.id.ToString();
                    }
                    
                    bjs007.lmDataTable lmtable = lb.GetLmByTypeid(typerow.id);//这里是子菜单的DataTable
                    for (int j = 0; j < lmtable.Rows.Count; j++)
                    {
                        bjs007.lmRow lmrow = (bjs007.lmRow)lmtable.Rows[j];
                        MenuItem itemzi = new MenuItem();
                        itemzi.Text = lmrow.name.Trim();
                        itemzi.NavigateUrl = lmrow.moban.Trim()+"?lmid="+lmrow.id.ToString();
                        itemzi.Target = "_blank";
                        item.ChildItems.Add(itemzi);
                    }
                    Menu1.Items.Add(item);
                }希望这个代码对你有所帮助!
      

  5.   

    先分析一下,不要管url重写那部分,从浏览器进行传值。菜单可以用Repeater(显示主分类)+Repeater(显示子分类)
    如点击Computers传Category.aspx?id=30
    点Desktops传Desktops.aspx?id=50这里假设类别表Category的表结构为:
    id  cname      parentid
    29  Books      0
    30  Computers  0
    50  DeskTops   30
    很容易得到DeskTops的父级分类为Computers,再次假设分类只是2级,那就好办多了(不需要递归)
    //这里是伪代码,请自己更改
    sql="select * from Category where id="+Request.QueryString["id"].ToString();
    DataTable dt = db.ExecuteTable(sql);
    if(dt.Rows.Count>0)
    {
      String pid = dt.Rows[0]["parentid"].ToString();
      if(pid=="0")//证明当前分类为主分类
      {
        
      }
      else//当前分类为子分类
      {
        
      }
    }
    大致这样判断..
      

  6.   

    我知道了 做出效果来了 用两个嵌套的repeater实现了 谢谢大家的指点。
    <div>
        <ul>
        <asp:Repeater ID="Repeater1" runat="server" 
                onitemdatabound="Repeater1_ItemDataBound">
        <ItemTemplate>
        <li><a href='test.aspx?departmentid=<%# Eval("departmentid") %>'><%#Eval("Name") %></a>
        <ul> <asp:Repeater ID="rep" runat="server">
        <ItemTemplate>
         <li><a href='test.aspx?Categoryid=<%# Eval("categoryid") %>'><%#Eval("Name") %></a>
        </ItemTemplate>
            </asp:Repeater></ul>
        </li>
        </ItemTemplate>
        </asp:Repeater>
        
        </ul>
        </div>
     protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Repeater1.DataSource = CatalogAccess.GetDepartments();
                Repeater1.DataBind();
                
            }
        }
        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            RepeaterItem item =e.Item;
        DataRowView drv = (DataRowView)item.DataItem;
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater rpt = (Repeater)item.FindControl("rep");
            string departmentId = Convert.ToString(drv.Row["DepartmentId"]);
            if (departmentId != null)
            {
                rpt.DataSource = CatalogAccess.GetCategoriesInDepartment(departmentId);
                rpt.DataBind();        }
        }
        }