2010-09-02 3 views
1

Im créer une application web en studio visuel asp.net 2008 .. dans ma demande, j'ai créé manuellement une commande de menu .. depuis, les changements de menus en fonction des besoins, je veux charger dynamiquement de la table sql .. aide-moi avec une application simple qui charge une commande de menu dynamique et je peux développer mes utiliser ces concepts ....Création de menus dynamiquement dans l'application web

merci u beaucoup

Répondre

1

charger votre menu à un DataTable. puis créer un répéteur dans votre page ascx (je suppose que votre menur est un contrôle utilisateur) créer le modèle pour le répéteur. lie le datatable en tant que source de données pour ce répéteur. et voilà. un menu dynamique simple.

ne oubliez pas de faire un cache sur votre contrôle. ou mettre en cache le datatable. de sorte que vous ne s'ouvre une connexion à la base de données sur chaque demande d'une page sur votre site

Voici quelques exemples d'utilisation d'un répéteur:

http://articles.sitepoint.com/article/asp-net-repeater-control http://www.w3schools.com/aspnet/aspnet_repeater.asp http://www.asp101.com/articles/john/repeater/default.asp

0

Download Source Code Here

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title>DataBase Driven Menu</title> 

</head> 
<body> 
<form id="form1" runat="server"> 
<div id="myslidemenu" class="jqueryslidemenu"> 
<asp:Menu ID="Menu1" runat="server" StaticEnableDefaultPopOutImage="False" 
Orientation="Horizontal" StaticSubMenuIndent="10px" BackColor="#FFFBD6" 
DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em" 
ForeColor="#990000"> 
<DataBindings> 
<asp:MenuItemBinding DataMember="MenuItem" NavigateUrlField="NavigateUrl" TextField="Text" 
ToolTipField="ToolTip" /> 
</DataBindings> 
<DynamicHoverStyle BackColor="#990000" ForeColor="White" /> 
<DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /> 
<DynamicMenuStyle BackColor="#FFFBD6" /> 
<DynamicSelectedStyle BackColor="#FFCC66" /> 
<StaticHoverStyle BackColor="#990000" ForeColor="White" /> 
<StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /> 
<StaticSelectedStyle BackColor="#FFCC66" /> 
</asp:Menu> 

</div> 
</form> 
</body> 
</html> 

Dans le code derrière le fichier

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Xml; 
using System.Data; 

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

protected void Page_Load(object sender, EventArgs e) 
{ 
if (!IsPostBack) 
{ 
DataSet ds = new DataSet(); 
XmlDataSource xmlDataSource = new XmlDataSource(); 
xmlDataSource.ID = "xmlDataSource"; 
xmlDataSource.EnableCaching = false; 

string connStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=G:\Admin\WebSite28\App_Data\Database.mdf;Integrated Security=True;User Instance=True"; 
using (SqlConnection conn = new SqlConnection(connStr)) 
{ 
string sql = "Select ID, Text,NavigateUrl,ParentID from Menu"; 
SqlDataAdapter da = new SqlDataAdapter(sql, conn); 
da.Fill(ds); 
da.Dispose(); 
} 

&nbsp; 

ds.DataSetName = "Menus"; 
ds.Tables[0].TableName = "Menu"; 
DataRelation relation = new DataRelation("ParentChild", 
ds.Tables["Menu"].Columns["ID"], 
ds.Tables["Menu"].Columns["ParentID"], 
true); 

relation.Nested = true; 
ds.Relations.Add(relation); 

xmlDataSource.Data = ds.GetXml(); 

//Reformat the xmldatasource from the dataset to fit menu into xml format 
xmlDataSource.TransformFile = Server.MapPath("~/TransformXSLT.xsl"); 

//assigning the path to start read all MenuItem under MenuItems 
xmlDataSource.XPath = "MenuItems/MenuItem"; 

//Finally, bind the source to the Menu1 control 
Menu1.DataSource = xmlDataSource; 
Menu1.DataBind(); 
} 

} 
} 

Créer un TransformXSLT.xsl

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes" encoding="utf-8"/> 
<!-- Find the root node called Menus 
and call MenuListing for its children --> 
<xsl:template match="/Menus"> 
<MenuItems> 
<xsl:call-template name="MenuListing" /> 
</MenuItems> 
</xsl:template> 

<!-- Allow for recusive child node processing --> 
<xsl:template name="MenuListing"> 
<xsl:apply-templates select="Menu" /> 
</xsl:template> 

<xsl:template match="Menu"> 
<MenuItem> 
<!-- Convert Menu child elements to MenuItem attributes --> 
<xsl:attribute name="Text"> 
<xsl:value-of select="Text"/> 
</xsl:attribute> 
<xsl:attribute name="ToolTip"> 
<xsl:value-of select="ToolTip"/> 
</xsl:attribute> 
<xsl:attribute name="NavigateUrl"> 
<xsl:value-of select="NavigateUrl"/> 
</xsl:attribute> 

<!-- Call MenuListing if there are child Menu nodes --> 
<xsl:if test="count(Menu) > 0"> 
<xsl:call-template name="MenuListing" /> 
</xsl:if> 
</MenuItem> 
</xsl:template> 
</xsl:stylesheet> 

Créer Sql Tableau

CREATE TABLE [dbo].[Menu](
[ID] [int] IDENTITY(1,1) NOT NULL, 
[Text] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
[ToolTip] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
[NavigateUrl] [varchar](150) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
[ParentID] [int] NULL) 
Questions connexes