Click here to Skip to main content
Click here to Skip to main content

Dynamically populating menu items from the database in ASP.NET

By , 28 Mar 2012
 

Introduction

In this article, you will learn how to populate menu items dynamically from a database. The dynamicity of the Menu control is particularly useful when you need to restrict users from using some specific menu items.

Menu Table Structure in Database

 

Creating the Database Tables 

You will need a table in the database to store the MenuItems

Menu Table Structure in Database

Here, the MenuLocation column contains the URL of the target page when the corresponding menu item is clicked. 

Sample data(For Reference):  

Step 1: You need to specify some parent menu items with parentid = 0

Step 2: You can then assign submenuitems to these parents

For instance consider the following structure-

MenuID  MenuName    MenuLocation ParentID
  1	ParentItem1	NULL	   0
  2	ParentItem2	NULL	   0
  3	ParentItem3	NULL	   0
 11	SubMenuItem1	NULL	   1
 12	SubMenuItem2	NULL	   1
 21	SubMenuItem3	NULL	   2

Here ParentItem1,2,3 are Parents and SubMenuItem1,2,3 are their childs as specified.
 
As far as MenuLocation Column is conerned you can assign urls in it e.g Default.aspx or User/NewUserAdd.aspx etc. according to the directory structure of your application. 

MasterPage

Step 1: Place the ASP.NET Menu control in the MasterPage.

<div class="MenuBar">
	<asp:Menu ID="menuBar" runat="server" Orientation="Horizontal" Width="100%">
		<DynamicHoverStyle CssClass="DynamicHover" />
		<DynamicMenuItemStyle CssClass="DynamicMenuItem" />
		<DynamicSelectedStyle CssClass="DynamicHover" />

		<StaticHoverStyle CssClass="staticHover" />
		<StaticMenuItemStyle CssClass="StaticMenuItem" ItemSpacing="1px" />
		<StaticSelectedStyle CssClass="staticHover" />
	</asp:Menu>
</div>

MasterPage Code-Behind

Step 2: Using the following code, you are pulling the menu and submenu from the database in proper order. Call the following function from the Page_Load event of the MasterPage when !IsPostBack.

private void getMenu()
{
    Connect();
    con.Open();
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    string sql = "Select * from tbl_WebMenu";
    SqlDataAdapter da = new SqlDataAdapter(sql, con);
    da.Fill(ds);
    dt = ds.Tables[0];
    DataRow[] drowpar = dt.Select("ParentID=" + 0);

    foreach (DataRow dr in drowpar)
    {
        menuBar.Items.Add(new MenuItem(dr["MenuName"].ToString(), 
                dr["MenuID"].ToString(), "", 
                dr["MenuLocation"].ToString()));
    }

    foreach (DataRow dr in dt.Select("ParentID >" + 0))
    {
        MenuItem mnu = new MenuItem(dr["MenuName"].ToString(), 
                       dr["MenuID"].ToString(), 
                       "", dr["MenuLocation"].ToString());
        menuBar.FindItem(dr["ParentID"].ToString()).ChildItems.Add(mnu);
    }
    con.Close();
}

Points of Interest

This type of menu population is particularly useful when both the user count and menu item count are variable because you can set the access permissions (restricting users from accessing some pages at runtime) which will be described in the next article.

Note

The menu control may not work as  intended in some browsers such as chrome. So in that case you may have to add a '.browser' file under 'App_Browsers' folder of your project.

Open file safari.browser from Solution Explorer and remove all the code clear and add the following:

<browsers>
  <browser refID="safari1plus">
    <controlAdapters>
      <adapter controlType="System.Web.UI.WebControls.Menu" adapterType="" />
    </controlAdapters>
  </browser>
</browsers>

Save the safari.browser file and there you go..

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Prabhat Kr. Singh
Software Developer
India India
Member
I'm a ASP.NET and C# programmer with interests in playing games such as UT and listening to rap music with meaningful lyrics...Smile | :)

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Questionhow I can request urlmembertanliem6535 May '13 - 21:55 
QuestionUp to which level we can create submenugroupnik kamble8 Apr '13 - 19:58 
AnswerRe: Up to which level we can create submenumemberPrabhat Kr. Singh8 Apr '13 - 20:06 
SuggestionIf I click menus I want .aspx PagememberRekaRamalingam5 Feb '13 - 23:55 
QuestionAm I missing smth? "The name 'menuBar' does not exist in the current context"memberTieuTrung22 Jan '13 - 22:11 
AnswerRe: Am I missing smth? "The name 'menuBar' does not exist in the current context"memberPrabhat Kr. Singh8 Apr '13 - 20:08 
QuestionClick event to dynamically added menu itemmemberKunjammu4 Oct '12 - 0:28 
Questionmenu items from 2 tables?memberLOKImotive24 Sep '12 - 7:31 
SuggestionRe: menu items from 2 tables?memberPrabhat Kr. Singh24 Sep '12 - 19:50 
Questionmenumemberrimjhim_414 Sep '12 - 1:26 
SuggestionRe: menumemberPrabhat Kr. Singh14 Sep '12 - 6:05 
GeneralRe: menumemberrimjhim_419 Sep '12 - 23:51 
GeneralRe: menumemberrimjhim_420 Sep '12 - 0:44 
GeneralMy vote of 5memberKarthik Reddy9 Sep '12 - 23:08 
QuestionExcellent and very simple way of adding dynamic menumembervijaydanielj6 Sep '12 - 20:12 
GeneralMy vote of 5membervijaydanielj6 Sep '12 - 19:58 
Questionhow can display and add 4-th level of menu items ?memberkksingh_bittu21 Aug '12 - 1:29 
AnswerRe: how can display and add 4-th level of menu items ?memberPrabhat Kr. Singh21 Aug '12 - 1:39 
Generalhow to get submenus menumemberumapathi193 Aug '12 - 22:02 
AnswerRe: how to get submenus menumemberPrabhat Kr. Singh5 Aug '12 - 5:13 
QuestionHow do I use the MenuLocation data to call .aspxmemberRudy Razo29 Jun '12 - 9:12 
AnswerRe: How do I use the MenuLocation data to call .aspxmemberPrabhat Kr. Singh29 Jun '12 - 19:07 
QuestionHow to generate submenu under submenu?memberbiswarup8828 Jun '12 - 23:14 
AnswerRe: How to generate submenu under submenu?memberPrabhat Kr. Singh29 Jun '12 - 19:04 
QuestionMulti Level Hierarchymemberernestmachado19 Jun '12 - 0:08 
QuestionNeed help for dynamic Menu itemsmembermadhupembarthi28 Mar '12 - 1:54 
AnswerRe: Need help for dynamic Menu itemsmemberPrabhat Kr. Singh28 Mar '12 - 2:16 
GeneralRe: Need help for dynamic Menu itemsmembermadhupembarthi28 Mar '12 - 3:18 
GeneralRe: Need help for dynamic Menu itemsmemberPrabhat Kr. Singh28 Mar '12 - 5:35 
GeneralRe: Need help for dynamic Menu itemsmemberMember 430475620 May '12 - 14:11 
AnswerRe: Need help for dynamic Menu itemsmemberPrabhat Kr. Singh20 May '12 - 19:17 
GeneralRe: Need help for dynamic Menu itemsmemberernestmachado19 Jun '12 - 1:01 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 28 Mar 2012
Article Copyright 2012 by Prabhat Kr. Singh
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid