2012-04-02 10 views
0

Ich muss dynamische Menüs aus der Datenbank erstellen. Ich habe das folgende Beispiel verwendet, das nur die übergeordneten Menüs anzeigt, aber das untergeordnete Menü nicht anzeigt. http://www.dotnetfunda.com/articles/article1477-how-to-create-a-menu-in-aspnet-using-aspmenu-control.aspxMenüs in Asp.net programmatisch generieren C# web form

-Code-Schnipsel i

bin mit
<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); 
     } 
    } 

Ich bin nicht sicher, was ich falsch mache. Basierend auf meiner Datenbank sollte es mir Kindermenüs für die Zeile xyz anzeigen. Wenn die AddChildItems-Funktion für die Match-Child-Zeile aufgerufen wird, kann sie nur die Schleife durchlaufen und zeigt nichts aus den Child-Zeilen.

OUTPUT mit aktuellem Code

HOME | Seite2 | Seite3 | Seite4

Es sollte mir Untermenüs für die Seite2 basierend auf meiner Datenbank anzeigen. Stattdessen werden nur die Links der übergeordneten Seite angezeigt.

+0

Es wäre toll, wenn jemand kann mir sagen, was mit dem obigen Code falsch ist .. – Learning

+0

Sie sehen vorherige beantwortet http://stackoverflow.com/questions/3623818/creating-menus- dynamisch-im-Web-Anwendung/10225825 – Moiz

Antwort

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); 
     } 
    }