How to populate menu from the SiteMapDataSourc, Database, xml files.

  How to populate menu from the SiteMapDataSourc, Database, xml files.

Populating using the SiteMapDataSource:

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

Populating using Database:

 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; 

    }    

XML file to populate the menu:

Web.sitemap is also a simple xml file. But I just wanted to show that you can also populate the menu using ordinary XML file.

 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); 
                }
            }
            
          
        }
posted @ 2007-11-26 12:28  Amanda2007  阅读(244)  评论(0编辑  收藏  举报