Un exemple simple pour gérer dynamiquement des modules (usercontrol) à afficher dans vos pages.
J'utilise ce code pour des modules d'administration, ce qui permet d'ajouter rapidement des fonctionnalités à l'admin.
Le principe est simple:
- On liste dans un datalist les fichiers *.ascx
- Lorsque l'on clique dessus on les charges dynamiquement dans un panel
voilà c tout, c pas révolutionnaire mais ça peut aider !
Source / Exemple :
Télécharger le source (.ZIP) pour avoir le code complet.
Dans la page index.aspx en code behind:
-----------------------------------------------------
Imports System.IO
Public Class WebForm1
Inherits System.Web.UI.Page
#Region " Code généré par le Concepteur Web Form "
'Cet appel est requis par le Concepteur Web Form.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Protected WithEvents panelModule As System.Web.UI.WebControls.Panel
Protected WithEvents dlModules As System.Web.UI.WebControls.DataList
Protected WithEvents cmdModule As System.Web.UI.WebControls.LinkButton
Protected WithEvents lblInfo As System.Web.UI.WebControls.Label
'REMARQUE : la déclaration d'espace réservé suivante est requise par le Concepteur Web Form.
'Ne pas supprimer ou déplacer.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
'Ne le modifiez pas en utilisant l'éditeur de code.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Placez ici le code utilisateur pour initialiser la page
If Session("CurrentModules") Is Nothing Then
lblInfo.Text = "Aucun module de sélectionné"
lblInfo.Visible = True
Else
lblInfo.Visible = False
panelModule.Controls.Add(LoadControl(Session("CurrentModules")))
End If
mDisplay_Files()
End Sub
Private Sub dlModules_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles dlModules.EditCommand
Session("CurrentModules") = Session("ListModules")(e.Item.ItemIndex)
Response.Redirect("index.aspx")
End Sub
Private Sub mDisplay_Files()
Dim sFiles As Array
Dim sFile As String
Dim Array As New ArrayList
sFiles = (Directory.GetFiles(Server.MapPath(""), "*.ascx"))
For Each sFile In sFiles
Array.Add(Path.GetFileName(sFile))
Next
'Affichage des fichiers dans une datalist
With dlModules
.DataSource = Array
.DataBind()
.Dispose()
End With
'Sauvegarde du tableau de fichier dans une session
'pour gérer par la suite l'événement de la datalist
Session("ListModules") = Array
End Sub
End Class
Dans la page index.aspx en mode html:
-----------------------------------------------------
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="index.aspx.vb" Inherits="gestionnaire_ascx.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>Module d'administration</title>
<meta content="True" name="vs_snapToGrid">
<meta content="True" name="vs_showGrid">
<LINK href="admin.css" type="text/css" rel="StyleSheet">
</HEAD>
<body>
<form id="module" runat="server">
<table cellSpacing="0" cellPadding="4" width="100%" border="0">
<tr>
<td vAlign="top" width="150">Modules installés:<br>
<asp:DataList id="dlModules" RepeatColumns="1" RepeatDirection="Vertical" ShowFooter="False" ShowHeader="False"
runat="server">
<ItemTemplate>
<font class="Intro11">
<asp:LinkButton id="cmdModule" CommandName="edit" runat="server">
<%# container.dataitem %>
</asp:LinkButton></font>
</ItemTemplate>
</asp:DataList>
</td>
<td vAlign="top">
<asp:Label id="lblInfo" runat="server">Label</asp:Label>
<asp:Panel id="panelModule" runat="server"></asp:Panel>
<br>
</td>
</tr>
</table>
</form>
</body>
</HTML>
Ensuite ben ajouter vos contrôles ascx dans le même répertoire que l'index... (voir le zip)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.