c# - HTML recursive binding -


i have datatble below:

id      menuname    url                  parentid 1       home        ~/home.aspx          null    2       product     ~/products.aspx      null  3       services    ~/services.aspx      null    4       erp     ~/erp.aspx           2 5       hrm         ~/hrm.aspx           4 7       payroll     ~/payroll.aspx       4 8       programming ~/programming.aspx   3 9       advertising ~/advert.aspx        3 10      television advert ~/tvadvert.aspx 9 11      radio advert ~/radioadvert.aspx  9 ........ ........ 

so want generate menu item unordered list based on datatable above such items null parentid should first level menu , others submenus based on parentid so:

<ul class="menu">     <li><a href="home.aspx">home</a></li>     <li><a href="produc.aspx">product</a>             <ul>                 <li>                 <a href="erp.aspx">erp</a>                       <ul>                         <li><a href="hrm.aspx">hrm</a></li>                         <li><a href="payroll.aspx">payroll</a></li>                     </ul>                 </li>             </ul>     </li>     <li><a href="services.aspx">services</a>             <ul>                 <li><a href="programming.aspx">advertising</a></li>                 <li><a href="advert.aspx">programming</a></li>             </ul>     </li>      .....etc </ul> 

below code seem incomplete:

public static string addtolist()      {           datatable table = new datatable();         table = getmenus();          system.text.stringbuilder sb = new system.text.stringbuilder();         foreach (datarow row in table.rows())         {             string parentid = row["parentmenuid"].tostring();             //string url = server.mappath(m.url);             if (string.isnullorempty(parentid))             {                 sb.append(string.format("<ul class=\"menu\"><li><a href=\"{0}\">{1}</a></li></ul>", row["url"].tostring(), row["description"].tostring()));             }          }          return sb.tostring();      }     gets top menu other effort submenu doesnt work. pls me out.  in advance 

out of pure boredom, usnig compositin of controls asp.net (each control has controls property), tree , rendered such (which means dont need real recursion), , array of indexes easy by-id access created controls

  public partial class _default : system.web.ui.page {     protected void page_load(object sender, eventargs e)     {         form.controls.add(addtolist());      }     public static htmlgenericcontrol addtolist()          {        htmlgenericcontrol menu = new htmlgenericcontrol("ul");        datatable table = getmenus();        //note  initialized 7, because max rows id, ,        // im basing builder on indexes work. can replaced        // dictionary<int,htmlgenericcontrol> or othre suitable collection        htmlgenericcontrol[] arrayoflists = new htmlgenericcontrol[7];        foreach (datarow row in table.rows)        {           //assume control has no children, unless proved otherwise            htmlgenericcontrol temp  = new htmlgenericcontrol("li");            //add control indexes place in array , init            arrayoflists[(int)row["id"] - 1] = temp;            htmlanchor link = new htmlanchor();            link.href = row["url"].tostring();            link.innertext = row["menuname"].tostring();            temp.controls.add(link);            int? parentid = string.isnullorempty(row["parentmenuid"].tostring()) ? null : (int?)int.parse(row["parentmenuid"].tostring());            if (parentid.hasvalue)            {                // if control has parent - make parent ul insead of li               // , add parents collection                arrayoflists[parentid.value - 1].tagname = "ul";                arrayoflists[parentid.value - 1].controls.add(arrayoflists[(int)row["id"] - 1]);            }            else            {                 // no parent = add first created ul menu                menu.controls.add(temp);            }         }         return menu;         }     public static datatable getmenus()    {        datatable dt = new datatable ();        dt.columns.add("id", typeof(int));        dt.columns.add("menuname", typeof(string));        dt.columns.add("url", typeof(string));        dt.columns.add("parentmenuid", typeof(string));        dt.rows.add(1,"home","~/home.aspx",        null  );        dt.rows.add( 2,"product","~/products.aspx",    null);        dt.rows.add(3,"services", "~/services.aspx",null);        dt.rows.add(4, "erp",  "~/erp.aspx",           "2" );        dt.rows.add( 5  ,"hrm" ,"~/hrm.aspx",           "4" );        dt.rows.add(7, " payroll", "~/payroll.aspx", "4");        return dt;     } 

Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -