Sunday, 23 December 2012

dynamic menu control

            table  structure  of menu22

ID   Name   Url   ParentID   IsActive  DisplayOrder
1        A                     0            1                1
2        B                     0            1                2
3        C                     0            1                3
4        A1                     1            1               1
5        B1                    2             1                2
6       C1                   3              1                1
7       B2                  2               1               1
8       B2_1            7                1                  2
9       B3                2                1                  3








                                                    dynamic menu control

   take a class

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
/// Summary description for PageModules
/// </summary>
public class PageModules
{

public PageModules()
{

//
// TODO: Add constructor logic here
//
}

#region Fields

/// <summary>
/// Field to store ID
/// </summary>
private int _id;

/// <summary>
/// Field to store Menu Name
/// </summary>
private string _menuName;

/// <summary>
/// Field to store Page Url
/// </summary>
private string _pageUrl;

/// <summary>
/// Field to store Parent ID
/// </summary>
private int _parentId;

/// <summary>
/// Field to store Is Active
/// </summary>
private bool _isActive;

/// <summary>
/// Field to store Display Order
/// </summary>
private int _displayOrder;

/// <summary>
/// Field to store Create By
/// </summary>
private string _createBy;

/// <summary>
/// Field to store Create Date
/// </summary>
private DateTime _createDate;

/// <summary>
/// Field to store Update By
/// </summary>
private string _updateBy;

/// <summary>
/// Field to store Update Date
/// </summary>
private DateTime _updateDate;

/// <summary>
/// Field to store selected flag
/// </summary>
private bool _isSelected;

#endregion

#region
Properties

/// <summary>
/// Gets or Sets ID
/// </summary>
public int ID
{

get { return _id; }
set { _id = value; }
}

/// <summary>
/// Gets or Sets MenuName
/// </summary>
public string MenuName
{

get { return _menuName; }
set { _menuName = value; }
}

/// <summary>
/// Gets or Sets PageURL
/// </summary>
public string PageURL
{

get { return _pageUrl; }
set { _pageUrl = value; }
}

/// <summary>
/// Gets or Sets ParentID
/// </summary>
public int ParentID
{

get { return _parentId; }
set { _parentId = value; }
}

/// <summary>
/// Gets or Sets IsActive
/// </summary>
public bool IsActive
{

get { return _isActive; }
set { _isActive = value; }
}

/// <summary>
/// Gets or Sets DisplayOrder
/// </summary>
public int DisplayOrder
{

get { return _displayOrder; }
set { _displayOrder = value; }
}

/// <summary>
/// Gets or Sets CreateBy
/// </summary>
public string CreateBy
{

get { return _createBy; }
set { _createBy = value; }
}

/// <summary>
/// Gets or Sets CreateDate
/// </summary>
public DateTime CreateDate
{

get { return _createDate; }
set { _createDate = value; }
}

/// <summary>
/// Gets or Sets UpdateBy
/// </summary>
public string UpdateBy
{

get { return _updateBy; }
set { _updateBy = value; }
}

/// <summary>
/// Gets or Sets UpdateDate
/// </summary>
public DateTime UpdateDate
{

get { return _updateDate; }
set { _updateDate = value; }
}

/// <summary>
/// Gets or Sets IsSelected
/// </summary>
public bool IsSelected
{

get { return _isSelected; }
set { _isSelected = value; }
}

#endregion

}







using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.Collections.Generic;

public partial class _Default : System.Web.UI.Page
{

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);

protected void Page_Load(object sender, EventArgs e)
{

try
{

LoadMenu();



}

catch (Exception ex)
{



}

}

private void LoadMenu()
{

List<PageModules> oListPageModules = null;
try
{

oListPageModules = GetPageModule();

FillMenu(oListPageModules);

}

catch (Exception ex)
{

throw ex;
}

}

public List<PageModules> GetPageModule()
{

IDataReader dr = null;
PageModules oPageModule = null;
List<PageModules> oPageModuleList = null;
DataSet oDs = null;
try
{

//oDs = SqlHelper.ExecuteDataset(con, CommandType.Text, "select * from r_PageModule");

dr = SqlHelper.ExecuteReader(con, CommandType.Text, "select * from menu22");

if (dr != null)
{

oPageModuleList =
new List<PageModules>();
while (dr.Read())
{

oPageModule =
new PageModules();
if (dr["ID"] != null && dr["ID"] != DBNull.Value)
{

oPageModule.ID =
int.Parse(dr["ID"].ToString());
}

if (dr["Name"] != null && dr["Name"] != DBNull.Value)
{

oPageModule.MenuName = dr[
"Name"].ToString().Trim();
}

if (dr["Url"] != null && dr["Url"] != DBNull.Value)
{

oPageModule.PageURL = dr[
"Url"].ToString().Trim();
}

if (dr["ParentID"] != null && dr["ParentID"] != DBNull.Value)
{

oPageModule.ParentID =
int.Parse(dr["ParentID"].ToString());
}

if (dr["DisplayOrder"] != null && dr["DisplayOrder"] != DBNull.Value)
{

oPageModule.DisplayOrder =
int.Parse(dr["DisplayOrder"].ToString());
}

oPageModuleList.Add(oPageModule);

}

dr.Close();

}

}

catch (Exception ex)
{

throw ex;
}

return oPageModuleList;
}

private void FillMenu(List<PageModules> oPageModulesList)
{

List<PageModules> oParentModules = null;
try
{

// If Page modules is not null
if (oPageModulesList != null && oPageModulesList.Count > 0)
{

foreach (PageModules oPages in oPageModulesList)
{

if (oPages.ParentID == 0)
{

if (oParentModules == null)
oParentModules = new List<PageModules>();
oParentModules.Add(oPages);

}

}

// If parent modules is not null
if (oParentModules != null)
{

// Sort parent modules
oParentModules.Sort(delegate(PageModules pm1, PageModules pm2)
{

return pm1.DisplayOrder.CompareTo(pm2.DisplayOrder);
});

LoadPageModules(oParentModules, oPageModulesList);

}

}

}

catch (Exception ex)
{

throw ex;
}

}

private void LoadPageModules(List<PageModules> oParentModules, List<PageModules> oPageModulesList)
{

MenuItem childMenuItem = null;
MenuItem parentMenuItem = null;
List<PageModules> oChildModules = null;
try
{

// Iterate each parent module
oParentModules.ForEach(delegate(PageModules oParentModule)
{

parentMenuItem =
new MenuItem();
parentMenuItem.Text = oParentModule.MenuName;

parentMenuItem.Value = oParentModule.ID.ToString();

if (!string.IsNullOrEmpty(oParentModule.PageURL))
{

parentMenuItem.NavigateUrl = ResolveUrl(oParentModule.PageURL);

}

else
{

parentMenuItem.Selectable =
false;
}



foreach (PageModules oChildPages in oPageModulesList)
{

if (oChildPages.ParentID == oParentModule.ID)
{

if (oChildModules == null)
oChildModules = new List<PageModules>();
oChildModules.Add(oChildPages);

}

}

if (oChildModules != null)
{

// Get child menu items
childMenuItem = AddChildNode(oChildModules, ref parentMenuItem);
oChildModules = new List<PageModules>();
}

Menu1.Items.Add(parentMenuItem);

});

}

catch (Exception ex)
{

throw ex;
}

}

private MenuItem AddChildNode(List<PageModules> oChildModules, ref MenuItem parentMenuItem)
{

MenuItem childMenuItem = null;
List<PageModules> oSubChildModules = null;
try
{

// If child modules are found
if (oChildModules != null && oChildModules.Count > 0)
{

// Sort child modules
oChildModules.Sort(delegate(PageModules pm1, PageModules pm2)
{

return pm1.DisplayOrder.CompareTo(pm2.DisplayOrder);
});

// Iterate each child module
foreach (PageModules oChildModule in oChildModules)
{

// Create child menu item
childMenuItem = new MenuItem();
childMenuItem.Text = oChildModule.MenuName;

childMenuItem.Value = oChildModule.ID.ToString();

if (!string.IsNullOrEmpty(oChildModule.PageURL))
{

childMenuItem.NavigateUrl = ResolveUrl(oChildModule.PageURL);

}

else
{

childMenuItem.Selectable =
false;
}

oSubChildModules = GetPageModule();

// Find child page modules
oSubChildModules = oSubChildModules.FindAll(delegate(PageModules oPageModule)
{

return ((oPageModule.ParentID == oChildModule.ID) ? true : false);
});

if (oSubChildModules != null)
{

// Populate child sub menu
AddChildNode(oSubChildModules, ref childMenuItem);
}

parentMenuItem.ChildItems.Add(childMenuItem);

}

}

}

catch (Exception ex)
{

throw ex;
}

return childMenuItem;
}

}