View Single Post
  #4 (permalink)  
Old 04-29-2008, 09:23 PM
GDevakii GDevakii is offline
D-Web Sr.Programmer
 
Join Date: Aug 2007
Posts: 138
GDevakii is on a distinguished road
Smile Re: How to Populate menu using sitemap and asp .net menu control and c#:

<?xml version="1.0" encoding="utf-8" ?>

<siteMap>

<siteMapNode url="Default.aspx" title="Home">

<siteMapNode title="Products" description="Our Products">

<siteMapNode

url="Product1.aspx"

title="My Products"

description="These are my products" />

<siteMapNode

url="Product2.aspx"

title="New Products"

description="Some new products " />

</siteMapNode>

<siteMapNode title="Services" description="Our Services">

<siteMapNode

url="Service1.aspx"

title="ASP.NET Consulting"

description="Best ASP.NET Consulting" />

<siteMapNode

url="Service2.aspx"

title="ASP.NET Training"

description="Best ASP.NET Training" />

</siteMapNode>

</siteMapNode>

private void CreateMenuControl()

{

Menu1.DataSource = GetSiteMapDataSource();

Menu1.DataBind();

}

private SiteMapDataSource GetSiteMapDataSource()

{

XmlSiteMapProvider xmlSiteMap = new XmlSiteMapProvider();

System.Collections.Specialized.NameValueCollection myCollection = new System.Collections.Specialized.NameValueCollection (1);

myCollection.Add("siteMapFile", "Web.sitemap");

xmlSiteMap.Initialize("provider", myCollection);

xmlSiteMap.BuildSiteMap();

SiteMapDataSource siteMap = new SiteMapDataSource();

return siteMap;

}
private void PopulateMenu()

{

DataSet ds = GetDataSetForMenu();

Menu menu = new Menu();

foreach (DataRow parentItem in ds.Tables["Categories"].Rows)

{

MenuItem categoryItem = new MenuItem((string)parentItem["CategoryName"]);

menu.Items.Add(categoryItem);

foreach (DataRow childItem in parentItem.GetChildRows("Children"))

{

MenuItem childrenItem = new MenuItem((string)childItem["ProductName"]);

categoryItem.ChildItems.Add(childrenItem);

}

}

Panel1.Controls.Add(menu);

Panel1.DataBind();

}

private DataSet GetDataSetForMenu()

{

SqlConnection myConnection = new SqlConnection(GetConnectionString());

SqlDataAdapter adCat = new SqlDataAdapter("SELECT * FROM Categories", myConnection);

SqlDataAdapter adProd = new SqlDataAdapter("SELECT * FROM Products", myConnection);

DataSet ds = new DataSet();

adCat.Fill(ds, "Categories");

adProd.Fill(ds, "Products");

ds.Relations.Add("Children",ds.Tables["Categories"].Columns["CategoryID"],ds.Tables["Products"].Columns["CategoryID"]);

return ds;

}
private void CreateMenuWithXmlFile()

{

string path = @"C:\MyXmlFile.xml";

DataSet ds = new DataSet();

ds.ReadXml(path);

Menu menu = new Menu();

menu.MenuItemClick += new MenuEventHandler(menu_MenuItemClick);



for (int i = 0; i < ds.Tables.Count; i++)

{

MenuItem parentItem = new MenuItem((string)ds.Tables[i].TableName);

menu.Items.Add(parentItem);



for (int c = 0; c < ds.Tables[i].Columns.Count; c++)

{

MenuItem column = new MenuItem((string)ds.Tables[i].Columns[c].ColumnName);

menu.Items.Add(column);



for (int r = 0; r < ds.Tables[i].Rows.Count; r++)

{

MenuItem row = new MenuItem((string)ds.Tables[i].Rows[r][c].ToString());

parentItem.ChildItems.Add(row);

}

}

}

Panel1.Controls.Add(menu);

Panel1.DataBind();

}
Reply With Quote