程序代码如下:
USING SYSTEM;
USING SYSTEM.COLLECTIONS;
USING SYSTEM.COMPONENTMODEL;
USING SYSTEM.DATA;
USING SYSTEM.DRAWING;
USING SYSTEM.WEB;
USING SYSTEM.WEB.SESSIONSTATE;
USING SYSTEM.WEB.UI;
USING SYSTEM.WEB.UI.WEBCONTROLS;
USING SYSTEM.WEB.UI.HTMLCONTROLS;
USING SYSTEM.DATA.OLEDB;
NAMESPACE WEBAPPLICATION6
{
/// <SUMMARY>
/// WEBFORM1 的摘要说明。
/// </SUMMARY>
PUBLIC CLASS WEBFORM1 : SYSTEM.WEB.UI.PAGE
{
PROTECTED COALESYS.WEBMENU.WEBMENU CSNETMENU;
PRIVATE VOID PAGE_LOAD(OBJECT SENDER, SYSTEM.EVENTARGS E)
{
// 在此处放置用户代码以初始化页面
CSNETMENU.MENUBAR.ABSOLUTEDOCKENABLED = FALSE;
CSNETMENU.MENUBAR.ABSOLUTEDRAGENABLED = FALSE;
CSNETMENU.MENUBAR.BACKGROUNDCOLOR = "";
CSNETMENU.MENUBAR.OUTERHIGHLIGHTCOLOR = "#666666";
CSNETMENU.MENUBAR.OUTERSHADOWCOLOR = "#666666";
CSNETMENU.MENUBAR.INNERSHADOWCOLOR = "#F9F8F7";
CSNETMENU.MENUBAR.HOVERCOLOR = "#DFDFDF";
CSNETMENU.MENUBAR.SELECTEDCOLOR = "#B6BDD2";
CSNETMENU.MENUBAR.SELECTEDTEXTCOLOR = "#000000";
CSNETMENU.BACKGROUNDCOLOR = "";
CSNETMENU.SELECTEDCOLOR = "#B6BDD2";
CSNETMENU.OUTERHIGHLIGHTCOLOR = "#C0C0C0";
CSNETMENU.OUTERSHADOWCOLOR = "#C0C0C0";
CSNETMENU.INNERSHADOWCOLOR = "#808080";
CSNETMENU.POPUPICON = "./IMAGES/ARROW-BLACK.GIF";
CSNETMENU.SELECTEDPOPUPICON = "./IMAGES/ARROW-WHITE.GIF";
CSNETMENU.CLEARPIXELIMAGE = "./IMAGES/CLEARPIXEL.GIF";
// POPULATE WEBMENU
LOADWEBMENUDATA(CSNETMENU);
}
//=============================================================================
// LOADWEBMENUDATA - LOAD WEBMENU FROM DATABASE
//
// INPUT:
// CSWEBMENU - [IN] COALESYS.WEBMENU.WEBMENU OBJECT
//
// OUTPUT:
// NONE
//
PUBLIC VOID LOADWEBMENUDATA(COALESYS.WEBMENU.WEBMENU CSWEBMENU)
{
COALESYS.WEBMENU.GROUP CSMENUGROUP;
// DATABASE INFO
STRING DBCONNSTRING = "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=";
STRING DBPATHSTRING = SERVER.MAPPATH("./SELFREFERENCEDTABLE.MDB");
STRING DBSQLSTRING = "SELECT * FROM NODES ORDER BY ID";
// INITIATE OLEDB INTERFACE
OLEDBCONNECTION DBCONN = NEW OLEDBCONNECTION(DBCONNSTRING + DBPATHSTRING);
OLEDBCOMMAND DBCOMM = NEW OLEDBCOMMAND(DBSQLSTRING, DBCONN);
OLEDBDATAADAPTER DBADAPTER = NEW OLEDBDATAADAPTER();
DBCONN.OPEN();
// FILL AN ADO.NET DATASET
DATASET DS = NEW DATASET();
DBADAPTER.SELECTCOMMAND = DBCOMM;
DBADAPTER.FILL(DS, "MENUITEMS");
DBCONN.CLOSE();
// CREATE THE DATA RELATION BETWEEN THE ID AND PARENT_ID COLUMNS OF THE MENUITEMS TABLE.
// (THIS IS THE KEY TO HIERARCHICAL NAVIGATING IN A SELF-REFERENCING TABLE).
DATARELATION DR = DS.RELATIONS.ADD("MENUITEMHIERARCHY",
DS.TABLES["MENUITEMS"].COLUMNS["ID"],
DS.TABLES["MENUITEMS"].COLUMNS["PARENT_ID"]);
// START TOP-DOWN NAVIGATION OF THE MENUITEM ROWS.
FOREACH(DATAROW DBMENUITEM IN DS.TABLES["MENUITEMS"].ROWS)
{
// IF THE PARENT_ID COLUM IS NULL, THEN THIS IS A ROOT MENU ITEM.
IF(DBMENUITEM.ISNULL("PARENT_ID"))
{
// CREATE A MENU GROUP FOR THE ROOT MENU ITEM
CSMENUGROUP = CSWEBMENU.GROUPS.ADD();
CSMENUGROUP.CAPTION = DBMENUITEM["CAPTION"].TOSTRING();
// EXECUTE THE RECURSIVE FUNCTION TO POPULATE ALL IT'S CHILDREN.
ADDMENUITEMS(DBMENUITEM.GETCHILDROWS(DR), DR, CSMENUGROUP);
}
}
}
//=============================================================================
// ADDMENUITEMS - RECURSIVE FUNCTION TO POPULATE HIERARCHICAL MENU ITEMS
// FROM DATA ROWS THAT HAVE PARENT/CHILD RELATIONSHIPS.
//
// INPUT:
// DATAROWS - [IN] CHILD ROWS
// DATAREL - [IN] DATA RELATION
// WEBMENUGROUP - [IN] WEBMENU GROUP
//
// OUTPUT:
// NONE
//
PUBLIC VOID ADDMENUITEMS(DATAROW[] DATAROWS, DATARELATION DATAREL, COALESYS.WEBMENU.GROUP WEBMENUGROUP)
{
COALESYS.WEBMENU.ITEM CSMENUITEM;
COALESYS.WEBMENU.GROUP CSNESTEDMENUGROUP;
DATAROW[] DRCHILDREN;
FOREACH(DATAROW DBMENUITEM IN DATAROWS)
{
CSMENUITEM = WEBMENUGROUP.ITEMS.ADD();
CSMENUITEM.CAPTION = DBMENUITEM["CAPTION"].TOSTRING();
CSMENUITEM.URL = DBMENUITEM["URL"].TOSTRING();
IF (DBMENUITEM["ENABLE"].TOSTRING()=="TRUE" )
{
CSMENUITEM.ENABLED=TRUE;
}
ELSE
{
CSMENUITEM.ENABLED=FALSE;
}
// CHECK IF THIS ITEM HAS CHILDREN OF IT'S OWN
DRCHILDREN = DBMENUITEM.GETCHILDROWS(DATAREL);
// IF SO, CREATE A GROUP FOR THE CHILDREN AND REENTER THIS FUNCTION.
IF(DRCHILDREN.LENGTH > 0)
{
CSNESTEDMENUGROUP = CSMENUITEM.ADDGROUP();
ADDMENUITEMS(DRCHILDREN, DATAREL, CSNESTEDMENUGROUP);
}
}
}
}
效果图如下:
