Hi Richardt,
I am writing step by step wise. Please follow it:
Step:1 -- Create Table In Database
=========================
create table as MENU by using following column
Column Name
==========
UserId
vMenuID
vMenuName
vMenuCaption
vPageName
vParent
iOrderBy
iWidth
iHeight
iPageX
iPageY
Step:2 -- Create a aspx file and copy the following code.
=======================================
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Desktop.aspx.cs" Inherits="HRIS.Restricted.Desktop" %>
<%@ Register assembly="Coolite.Ext.Web" namespace="Coolite.Ext.Web" tagprefix="ext" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Human Resource Information System</title>
<style type="text/css">
.start-button {
background-image:url(../Images/vista_start_button.gif) !important;
}
.shortcut-icon {
width:48px;
height:48px;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../Images/window.png", sizingMethod="scale");
}
.icon-grid48 {
background-image: url(../Images/grid48x48.png) !important;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../Images/grid48x48.png", sizingMethod="scale");
}
.icon-user48 {
background-image: url(../Images/Report1.png) !important;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../Images/Report1.png", sizingMethod="scale");
}
.icon-window48 {
background-image: url(../Images/window48x48.png) !important;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../Images/window48x48.png", sizingMethod="scale");
}
.desktopEl {
position:absolute !important;
}
</style>
<script type="text/javascript">
var alignPanels = function () {
pnlSample.getEl().alignTo(Ext.getBody(), "tr", [-505, 5], false)
}
var template = '{1}';
var change = function (value) {
return String.format(template, (value > 0) ? 'green' : 'red', value);
}
var pctChange = function (value) {
return String.format(template, (value > 0) ? 'green' : 'red', value + '%');
}
</script>
</head>
<body>
<form id="form1" runat="server">
<ext:ScriptManager ID="ScriptManager1" runat="server">
<Listeners>
<DocumentReady Handler="alignPanels();" />
<WindowResize Handler="alignPanels();" />
</Listeners>
</ext:ScriptManager>
<ext:Desktop ID="HRISDesktop" runat="server" BackgroundColor="Black" ShortcutTextColor="White" Wallpaper="../Images/desktop.gif">
<StartButton Text="Start" IconCls="start-button" />
<%-- NOTE: Body Controls must be added to a container with position:absolute --%>
<Body>
</Body>
<Modules>
<ext:DesktopModule ModuleID="DesktopModule1" WindowID="ReportWindow1" AutoRun="false">
</ext:DesktopModule>
</Modules>
<Shortcuts>
<ext:DesktopShortcut ModuleID="DesktopModule1" Text="Report Window" IconCls="shortcut-icon icon-user48" />
</Shortcuts>
<StartMenu Width="325" Height="300" ToolsWidth="125">
<ToolItems>
<ext:MenuItem Text="Settings" Icon="Wrench">
<Menu>
<ext:Menu ID="menuTheme" runat="server">
<Items>
<ext:MenuItem Text="Themes" Icon="Theme">
<Menu>
<ext:Menu ID="InternTheme" runat="server">
<Items>
<ext:MenuItem ID="menuDefault" Text="Default">
<Listeners>
<Click Handler="Coolite.Ext.setTheme('/extjs/resources/css/ext-all-embedded-css/coolite.axd');" />
</Listeners>
</ext:MenuItem>
<ext:MenuItem ID="MenuItem1" Text="Gray">
<Listeners>
<Click Handler="Coolite.Ext.setTheme('/extjs/resources/css/xtheme-gray-embedded-css/coolite.axd');" />
</Listeners>
</ext:MenuItem>
<ext:MenuItem ID="MenuItem2" Text="Slate">
<Listeners>
<Click Handler="Coolite.Ext.setTheme('/extjs/resources/css/xtheme-slate-embedded-css/coolite.axd');" />
</Listeners>
</ext:MenuItem>
</Items>
</ext:Menu>
</Menu>
</ext:MenuItem>
<ext:MenuItem Text="Change Password" Icon="User" runat="server">
</ext:MenuItem>
</Items>
</ext:Menu>
</Menu>
</ext:MenuItem>
<ext:MenuItem Text="Logout" Icon="Disconnect">
<AjaxEvents>
<Click OnEvent="Logout_Click">
<EventMask ShowMask="true" Msg="Good Bye..." MinDelay="0" />
</Click>
</AjaxEvents>
</ext:MenuItem>
</ToolItems>
<Items>
<ext:MenuItem ID="MainMenu" runat="server" Text="All" Icon="Folder">
<Plugins>
<ext:TabCloseMenu ID="tab">
</ext:TabCloseMenu>
</Plugins>
</ext:MenuItem>
</Items>
<Items>
<ext:MenuItem ID="Support" runat="server" Text="Support" Icon="Help">
</ext:MenuItem>
<ext:MenuItem ID="Feedback" runat="server" Text="Feedback" Icon="Information">
</ext:MenuItem>
<ext:MenuItem ID="Developer" runat="server" Text="Developer" Icon="Information">
</ext:MenuItem>
</Items>
</StartMenu>
</ext:Desktop>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</form>
</body>
</html>
and copy the following code in code behind file
using System;
using System.Collections;
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 Coolite.Ext.Web;
using System.IO;
namespace HRIS.Restricted
{
public partial class Desktop : System.Web.UI.Page
{
int menuValue = 1;
int incValue = 1;
protected void Page_Load(object sender, EventArgs e)
{
buildMenu();
}
private void buildMenu()
{
Coolite.Ext.Web.Menu SubMenu = new Coolite.Ext.Web.Menu();
Coolite.Ext.Web.MenuItem SubMenuFolder;
string ConnectionString = ConfigurationManager.ConnectionStrings["SecurityConnection"].ConnectionString;
SqlConnection con = new SqlConnection(ConnectionString);
string sqlstatment = "select * from Menu where UserName = '" + User.Identity.Name.ToString() + "' order by iOrderBy";
SqlDataAdapter adapter = new SqlDataAdapter(sqlstatment, con);
DataSet ds = new DataSet();
adapter.Fill(ds, "vw_menu");
if (ds.Tables[0].Rows.Count > 0)
{
SubMenu.ID = "SubMenu";
MainMenu.Menu.Add(SubMenu);
}
ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["vMenuID"], ds.Tables[0].Columns["vParent"]);
foreach (DataRow dbRow in ds.Tables[0].Rows)
{
if (dbRow.IsNull("vParent"))
{
SubMenuFolder = new Coolite.Ext.Web.MenuItem();
SubMenuFolder.ID = dbRow["vMenuName"].ToString();
SubMenuFolder.Icon = Icon.Folder;
SubMenuFolder.Text = dbRow["vMenuCaption"].ToString();
SubMenu.Items.Add(SubMenuFolder);
incValue = 1;
this.PopulateSubItem(dbRow, SubMenuFolder);
}
}
}
private void PopulateSubItem(DataRow dbRow, Coolite.Ext.Web.MenuItem itm)
{
Coolite.Ext.Web.MenuItem childitm;
Coolite.Ext.Web.Menu SubSubMenu = new Coolite.Ext.Web.Menu();
foreach (DataRow childRow in dbRow.GetChildRows("NodeRelation"))
{
if ((int)childRow["vType"] == 0)
{
SubSubMenu.ID = "SubSubMenu" + menuValue.ToString();
itm.Menu.Add(SubSubMenu);
childitm = new Coolite.Ext.Web.MenuItem();
childitm.ID = childRow["vMenuName"].ToString();
childitm.Icon = Icon.Folder;
childitm.Text = childRow["vMenuCaption"].ToString();
SubSubMenu.Items.Add(childitm);
incValue = 1;
}
else
{
if (incValue == 1)
{
SubSubMenu.ID = "SubSubMenu" + menuValue.ToString();
itm.Menu.Add(SubSubMenu);
}
Coolite.Ext.Web.DesktopWindow deskWindow = new Coolite.Ext.Web.DesktopWindow();
deskwindow.ID = childRow["vMenuName"].ToString() + "1";
deskwindow.Title = childRow["vMenuCaption"].ToString();
deskwindow.Icon = Icon.User;
deskwindow.Width = (int)childRow["iWidth"];
deskwindow.Height = (int)childRow["iHeight"];
deskwindow.PageX = (int)childRow["iPageX"];
deskwindow.PageY = (int)childRow["iPageY"];
deskwindow.AutoLoad.Url = childRow["vPageName"].ToString();
deskwindow.AutoLoad.Mode = LoadMode.IFrame;
deskwindow.Maximizable = true;
deskwindow.Resizable = true;
deskwindow.CenterOnLoad = true;
PlaceHolder1.Controls.Add(deskWindow);
childitm = new Coolite.Ext.Web.MenuItem();
childitm.ID = childRow["vMenuName"].ToString();
childitm.Icon = Icon.User;
childitm.Text = childRow["vMenuCaption"].ToString();
childitm.Listeners.Click.Handler = "#{" + childRow["vMenuName"].ToString() + "1" + "}.show();#{" + childRow["vMenuName"].ToString() + "1" + "}.reload();";
SubSubMenu.Items.Add(childitm);
incValue = 0;
}
menuValue += menuValue;
this.PopulateSubItem(childRow, childitm);
}
}
protected void Logout_Click(object sender, AjaxEventArgs e)
{
FormsAuthentication.SignOut();
Response.Redirect("Login.aspx");
}
}
}
Have any confusion please inform me.
Thanks,
Sadeque Sharif
Freelance Developer
Mail:
sadeque.sharif@yahoo.com
Web:
www.crea8ivecode.net