How to bind Asp menucontrol from database

If you are using asp menucontrol which is not static means it should be bind from database.I will give a best way to bind menucontols having menues and sub menus.

menuControl


<asp:Menu ID="Menu1" runat="server" DynamicVerticalOffset="1" Width="400px" Orientation="Horizontal"
StaticEnableDefaultPopOutImage="False" Style="margin-left: 0px" DynamicPopOutImageTextFormatString=""
StaticPopOutImageTextFormatString="" StaticSubMenuIndent="" StaticMenuItemStyle-ItemSpacing="5px"
StaticMenuItemStyle-Font-Size="Larger">
<StaticMenuStyle />
<StaticMenuItemStyle Height="15px" BorderStyle="Solid" BorderWidth="1px" BorderColor="#164D86"
CssClass="slidetabsmenu" />
<DynamicSelectedStyle CssClass="itemsub" Height="15px" ForeColor="White" />
<DynamicMenuItemStyle CssClass="itemsub" BorderColor="#164D86" Height="15px" BorderStyle="solid"
BorderWidth="1px" ForeColor="White" />
<DynamicHoverStyle CssClass="itemsub_h" Height="15px" ForeColor="White" />
<DynamicMenuStyle Height="15px" ForeColor="White" />
<DynamicItemTemplate>
<asp:Label ID="Label2" Height="15px" runat="server" Text='<%# Eval( "Text" ) %>'
ForeColor="White"> </asp:Label>
</DynamicItemTemplate>
<StaticHoverStyle />
</asp:Menu>


Css Class used(optional)

<style type="text/css">
.itemsub
{
background-color: #77A1B9;
color: #FFFFFF;
padding:1px 2px 1px 2px;
border:none;
margin:0px;
cursor:hand;
}
.itemsub_h
{
background-color: #006699;
color:#FFFFFF;
padding:1px 2px 1px 2px;
border:none;
margin:0px;

}

</style>



first step:

create a table those contain paent element
Example:
create table Menu1

having coloumns

pk_id for primary key,
main_menu for parentmenutext(varchar),
has_children for whether it contains child(bool)

data :pkid main_menu has_children
1 Department true

second step:

create table for submenu

Example:table Menu2

having columns

pk_id for primary key,
mnu1_fk is the foreign key of menu1,
main_menu for submenutext(varchar),
has_children for whether it contains child(bool)//this is require for 3rd lable(optional)

data :pkid parentmenutext mnu1_fk has_children
1 physics 1(pkid of menu1) false(true if maximum label 3)




Code


pageload: if (!Page.IsPostBack)
{

PopulaterRootmenus();

}


bind parentlabel menu from menu1


private void PopulaterRootmenus()
{
string sql = "select main_menu,pk_id,has_children from Menu1";
SqlConnection conn = new SqlConnection("connection string");
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = new DataTable();
dt = ds.Tables[0];


for (int i = 0; i < dt.Rows.Count; i++)
{
MenuItem mnuLinkItem = new MenuItem();
mnuLinkItem.Text = Convert.ToString(dt.Rows[i]["main_menu"]);
mnuLinkItem.Value = Convert.ToString(dt.Rows[i]["pk_id"]);
int has_children = Convert.ToInt32(dt.Rows[i]["has_children"]);
Menu1.Items.Add(mnuLinkItem);//add menu

mnuLinkItem.Text = mnuLinkItem.Text;
if (has_children == 1)//if menu has child then bind submenu
{
Populatesecondlevelmenus(mnuLinkItem, mnuLinkItem.Value);
}
}

}



bind submnues


//find submenus of menu and bind under menu
private void Populatesecondlevelmenus(MenuItem mnuLinkItem, string parentVal)
{
string sql = "select pk_id,menu_name,has_children from Menu2 where mnu1_fk = " + Convert.ToInt32(parentVal) + " ";
SqlConnection conn = new SqlConnection("connection string");
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = new DataTable();
dt = ds.Tables[0];

for (int i = 0; i < dt.Rows.Count; i++)
{
MenuItem mnuLinkItemsub = new MenuItem();
mnuLinkItemsub.Value = Convert.ToString(dt.Rows[i]["pk_id"]);
mnuLinkItemsub.Text = Convert.ToString(dt.Rows[i]["menu_name"]);
int has_children = Convert.ToInt32(dt.Rows[i]["has_children"]);
mnuLinkItemsub.NavigateUrl = Request.Url.Scheme + "://" + Request.Url.Host + Request.ApplicationPath +"WebForm1.aspx";//set url

mnuLinkItemsub.Text = "<font color = white>" + mnuLinkItemsub.Text + "</font>";//set text and font


mnuLinkItem.ChildItems.Add(mnuLinkItemsub);

}

}




You want submenues under submenu then just add another table like menu2 keep pkid of menu2 as foreign key of menu3 table and set has_childer column of menu2 true which contain submenu.


Article by Abhay Kumar Raut
DNS MVM and .Net Guru Team Lead at CirrusCloud Systems Bhubaneswar,Odisha Thanks and Regards, Abhay Kumar Raut

Follow Abhay Kumar Raut or read 39 articles authored by Abhay Kumar Raut

Comments

No responses found. Be the first to comment...


  • Do not include your name, "with regards" etc in the comment. Write detailed comment, relevant to the topic.
  • No HTML formatting and links to other web sites are allowed.
  • This is a strictly moderated site. Absolutely no spam allowed.
  • Name:
    Email: