2012-04-02 80 views
0

我必須從數據庫創建動態菜單。我用下面的例子只顯示了父菜單,但沒有顯示子菜單。我使用在Asp.net中以編程方式生成菜單c#web表單

<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal" > 

// I am convert ds to table for now. 
DataTable table = dsMenu.Tables[0]; ; 
DataView dvMenu = new DataView(table); 
dvMenu.RowFilter = "PageInheritance is NULL"; 
foreach (DataRowView row in dvMenu) 
{ 
MenuItem menuItem = new MenuItem(row["PageName"].ToString(), row["PageId"].ToString()); 
menuItem.NavigateUrl = row["PageURL"].ToString() + "?PageId=" + row["PageId"] + "&Language=" + sLangCode; 
Menu1.Items.Add(menuItem); 
AddChildItems(dvMenu.Table, menuItem); 
} 

//Function to look for child menu 
    private static void AddChildItems(DataTable table, MenuItem menuItem) 
    { 
     DataView viewItem = new DataView(table); 
     viewItem.RowFilter = "PageInheritance = " + menuItem.Value; 
     foreach (DataRowView childView in viewItem) 
     { 
      MenuItem childItem = new MenuItem(childView["PageName"].ToString(), 
      childView["PageId"].ToString()); 
      childItem.NavigateUrl = childView["PageURL"].ToString(); 
      menuItem.ChildItems.Add(childItem); 
      AddChildItems(table, childItem); 
     } 
    } 

http://www.dotnetfunda.com/articles/article1477-how-to-create-a-menu-in-aspnet-using-aspmenu-control.aspx

的代碼片段,我不知道我做錯了。根據我的數據庫,它應該會顯示行xyz的子菜單。當爲匹配子行調用AddChildItems函數時,它只是熟練使用循環,並不顯示任何子行。

按當前代碼輸出

首頁|第2頁|第3頁| Page 4

它應該根據我的數據庫顯示Page2的子菜單。相反,它只顯示上面的父頁面鏈接。

+0

這將是巨大的,如果有人能告訴我什麼是錯的,上面的代碼.. – Learning 2012-04-02 13:47:38

+0

你看前面的回答 http://stackoverflow.com/questions/3623818/creating-menus-動態功能於Web的應用程序/ 10225825 – Moiz 2012-04-19 10:17:11

回答

0
public void FillMenuControl(int ACCESSID) 
    { 
     try 
     { 
      int AcessID; 
      int UserSessionid = 1; 
      dtchild = new DataTable(); 
      OBJClsMenuList = new ClsMenuList(); 
      ds = new DataSet(); 
      OBJClsMenuList = new ClsMenuList(); 
      ds = OBJClsMenuList.GetParentMenuItems(ACCESSID,'G'); 

      dt = new DataTable(); 
      dt = ds.Tables[0]; 
      MenuItem item1; 
      MenuItem childitems; 
      if (dt.Rows.Count > 0) 
      { 
       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        item1 = new MenuItem(); 
        string t = dt.Rows[i][0].ToString(); 
        item1.Value = dt.Rows[i][0].ToString(); 
        item1.Text = dt.Rows[i][1].ToString(); 
        item1.NavigateUrl = dt.Rows[i][2].ToString(); 
        Menu1.Items.Add(item1); 

        dschild = OBJClsMenuList.GetChildMenuitems(Convert.ToInt32(dt.Rows[i][0].ToString()),'G'); 
        dtchild = new DataTable(); 
        dtchild = dschild.Tables[0]; 
        for (int j = 0; j < dtchild.Rows.Count; j++) 
        { 
         childitems = new MenuItem(); 
         childitems.Value = dtchild.Rows[j][0].ToString(); 
         childitems.Text = dtchild.Rows[j][1].ToString(); 
         AcessID = Convert.ToInt32(dtchild.Rows[j][3].ToString()); 
         if (UserSessionid >= AcessID) 
         { 
          childitems.NavigateUrl = dtchild.Rows[j][2].ToString(); 
         } 
         else 
         { 
          childitems.NavigateUrl = "~/login.aspx"; 
         } 

         Menu1.Items[i].ChildItems.Add(childitems); 
        } 
       } 
      } 
      else 
      { 

      } 
     } 

     catch (Exception ex) 
     { 
      string err = ex.Message; 
      if (ex.InnerException != null) 
      { 
       err = err + " :: Inner Exception :- " + ex.InnerException.Message; 
      } 
      string addInfo = "Error :: -> "; 
      ClsExceptionPublisher objPub = new ClsExceptionPublisher(); 
      objPub.Publish(err, addInfo); 
     } 
    } 
相關問題