begin process at 2012 05 27 01:54:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ASP.Net

 > USER CONTROL POUR AFFICHER LA DESCRIPTION D'UN PRODUIT

USER CONTROL POUR AFFICHER LA DESCRIPTION D'UN PRODUIT


 Information sur la source

Note :
Aucune note
Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous :usercontrol, usercontrol, ascx, ficheproduit, généricité Niveau :Initié Date de création :07/08/2004 Date de mise à jour :07/08/2004 23:55:17 Vu :15 187

Auteur : jesusonline

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Dans les sites de commerce, les pages affichant les propriétés d'un produit sont toutes identiques, il y a juste certaines propriétés propre à l'article qui change.

Dans cet exemple, je vais vous montrer, un User Control qui demandera qu'un objet Vin en propriété et ressortira une sorte de fiche complete sur cet objet.

J'ai pris le cas du vin, car je suis en train de developper la nouvelle version de mon site


Ce que je fais est assez simple, j'ai un UserControl (ascx) nommé vin.ascx et j'appelle autant de fois que j'ai d'objet vinClass dans vins.aspx


Source

  • 'Tout d'abord voici le code de la collection de Vins et de la Class VinClass
  • #Region " Classes des vins :) "
  • Public Class VinClass
  • Public Code As String
  • Public NomVin As String
  • Public Description As String
  • Public LongDescription As String
  • Public ImageEtiquetteUrl As String
  • Public Prix As Decimal
  • End Class
  • Public Class VinClassCollection
  • Inherits CollectionBase
  • Default ReadOnly Property item(ByVal index As Integer) As VinClass
  • Get
  • Return CType(Me.List.Item(index), VinClass)
  • End Get
  • End Property
  • Public Function add(ByVal oVinClass As VinClass) As VinClass
  • Me.List.Add(oVinClass)
  • Return oVinClass
  • End Function
  • End Class
  • #End Region
  • 'Dans Vins.aspx je charge ma collection de Vin, puis je boucle sur cette collection et passe ajoute à ma page un nouvel UserControl avec en parametre l'objet VinClass
  • 'Voici le code du page_Load de vins.aspx :
  • If Not VinColl.Count = 0 Then
  • For Each oVinClass As VinClass In VinColl
  • 'on charge un nouveau UserControl et on vérifie que celui ci existe
  • Dim control As Vin = New Vin
  • If New FileInfo(Server.MapPath("vin.ascx")).Exists = True Then
  • control = LoadControl("vin.ascx")
  • 'On rentre nos données à l'UserControl
  • control.Vin = oVinClass
  • 'On ajoute le usercontrol et une barre horizontale pour séparer les controles
  • Page.Controls.Add(control)
  • Page.Controls.Add(New LiteralControl("<hr/>"))
  • 'On lance une exception si le fichier vin.ascx n'existe pas
  • Else
  • Throw New Exception("Vin.ascx non trouvé")
  • End If
  • Next
  • Page.Controls.RemoveAt(Vin.Controls.Count - 1)
  • End If
  • 'voici maintenant le code de vin.ascx :
  • <%@ Control Language="vb" AutoEventWireup="false" Codebehind="Vin.ascx.vb" Inherits="BeaujolaisDurand.Vin" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
  • <h2><asp:hyperlink id="HyperLinkNomVin" runat="server"/></h2>
  • <asp:hyperlink id="HyperLinkImageDetailVin" runat="server"><asp:image id="ImgEtiquette" runat="server"/></asp:hyperlink>
  • <dl>
  • <dd>Description :</dd>
  • <dt>
  • <asp:literal id="LiteralDecriptionVin" runat="server"/>
  • </dt>
  • </dl>
  • <p class="Tarifs">Tarifs: <asp:literal id="LiteralPrixVin" runat="server"/> ¤</p>
  • <p class="LinkDetailVin"><asp:hyperlink id="HyperLinkDetailVin" runat="server">Cliquer ici pour en savoir plus</asp:hyperlink></p>
  • 'Le code est simple, est il est XHTML compliant, je gere ma mis en page via les CSS2
  • 'Voici le code de vin.ascx.vb
  • Imports System.IO
  • Public Class Vin
  • Inherits System.Web.UI.UserControl
  • #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
  • '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
  • #Region " Protected Withevents "
  • Protected WithEvents ImgEtiquette As System.Web.UI.WebControls.Image
  • Protected WithEvents LiteralDecriptionVin As System.Web.UI.WebControls.Literal
  • Protected WithEvents LiteralPrixVin As System.Web.UI.WebControls.Literal
  • Protected WithEvents HyperLinkImageDetailVin As System.Web.UI.WebControls.HyperLink
  • Protected WithEvents HyperLinkDetailVin As System.Web.UI.WebControls.HyperLink
  • Protected WithEvents HyperLinkNomVin As System.Web.UI.WebControls.HyperLink
  • #End Region
  • #Region " Propriété "
  • Private _Vin As VinClass
  • Public WriteOnly Property Vin() As VinClass
  • Set(ByVal Value As VinClass)
  • _Vin = Value
  • End Set
  • End Property
  • #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 Not _Vin.NomVin Is Nothing Then
  • HyperLinkNomVin.Text = _Vin.NomVin
  • If Not _Vin.Description Is Nothing Then
  • LiteralDecriptionVin.Text = _Vin.Description
  • Else
  • LiteralDecriptionVin.Text = "Indisponible"
  • End If
  • 'on verra l'existence de la photo
  • If Not _Vin.ImageEtiquetteUrl Is Nothing And New FileInfo(Server.MapPath(_Vin.ImageEtiquetteUrl)).Exists = True Then
  • ImgEtiquette.ImageUrl = _Vin.ImageEtiquetteUrl
  • ImgEtiquette.AlternateText = "Etiquette du " & _Vin.NomVin
  • Else
  • ImgEtiquette.ImageUrl = "#"
  • ImgEtiquette.AlternateText = "Etiquette du " & _Vin.NomVin
  • End If
  • 'on ajoute ou arrondi a 2 chiffres
  • If Not _Vin.Prix = 0 Then
  • LiteralPrixVin.Text = FormatNumber(_Vin.Prix, 2)
  • Else
  • LiteralPrixVin.Text = "Indisponible"
  • End If
  • If Not _Vin.Code Is Nothing Then
  • HyperLinkDetailVin.NavigateUrl = "DetailVin.aspx?vin=" & Server.UrlEncode(_Vin.Code)
  • HyperLinkImageDetailVin.NavigateUrl = "DetailVin.aspx?vin=" & Server.UrlEncode(_Vin.Code)
  • HyperLinkNomVin.NavigateUrl = "DetailVin.aspx?vin=" & Server.UrlEncode(_Vin.Code)
  • Else
  • HyperLinkDetailVin.Visible = False
  • HyperLinkImageDetailVin.NavigateUrl = "#"
  • HyperLinkNomVin.NavigateUrl = "#"
  • End If
  • Else
  • 'si il n'y a pas le nom du vin on continue pas plus loin ...
  • Me.Visible = False
  • End If
  • End Sub
  • End Class
  • #Region " Classes des vins :) "
  • Public Class VinClass
  • Public Code As String
  • Public NomVin As String
  • Public Description As String
  • Public LongDescription As String
  • Public ImageEtiquetteUrl As String
  • Public Prix As Decimal
  • End Class
  • Public Class VinClassCollection
  • Inherits CollectionBase
  • Default ReadOnly Property item(ByVal index As Integer) As VinClass
  • Get
  • Return CType(Me.List.Item(index), VinClass)
  • End Get
  • End Property
  • Public Function add(ByVal oVinClass As VinClass) As VinClass
  • Me.List.Add(oVinClass)
  • Return oVinClass
  • End Function
  • End Class
  • #End Region
'Tout d'abord voici le code de la collection de Vins et de la Class VinClass 

#Region " Classes des vins :) "

    Public Class VinClass

        Public Code As String
        Public NomVin As String
        Public Description As String
        Public LongDescription As String
        Public ImageEtiquetteUrl As String
        Public Prix As Decimal

    End Class

    Public Class VinClassCollection
        Inherits CollectionBase

        Default ReadOnly Property item(ByVal index As Integer) As VinClass
            Get
                Return CType(Me.List.Item(index), VinClass)
            End Get
        End Property

        Public Function add(ByVal oVinClass As VinClass) As VinClass
            Me.List.Add(oVinClass)
            Return oVinClass
        End Function

    End Class

#End Region


'Dans Vins.aspx je charge ma collection de Vin, puis je boucle sur cette collection et passe ajoute à ma page un nouvel UserControl avec en parametre l'objet VinClass 

'Voici le code du page_Load de vins.aspx : 

        If Not VinColl.Count = 0 Then

            For Each oVinClass As VinClass In VinColl

                'on charge un nouveau UserControl et on vérifie que celui ci existe
                Dim control As Vin = New Vin
                If New FileInfo(Server.MapPath("vin.ascx")).Exists = True Then
                    control = LoadControl("vin.ascx")

                    'On rentre nos données à l'UserControl
                    control.Vin = oVinClass

                    'On ajoute le usercontrol et une barre horizontale pour séparer les controles
                    Page.Controls.Add(control)
                    Page.Controls.Add(New LiteralControl("<hr/>"))

                    'On lance une exception si le fichier vin.ascx n'existe pas
                Else
                    Throw New Exception("Vin.ascx non trouvé")
                End If

            Next

            Page.Controls.RemoveAt(Vin.Controls.Count - 1)

        End If


'voici maintenant le code de vin.ascx : 

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="Vin.ascx.vb" Inherits="BeaujolaisDurand.Vin" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
  <h2><asp:hyperlink id="HyperLinkNomVin" runat="server"/></h2>
    <asp:hyperlink id="HyperLinkImageDetailVin" runat="server"><asp:image id="ImgEtiquette" runat="server"/></asp:hyperlink>
  <dl>
    <dd>Description :</dd> 
    <dt>
		<asp:literal id="LiteralDecriptionVin" runat="server"/>
    </dt>
  </dl>	
  <p class="Tarifs">Tarifs: <asp:literal id="LiteralPrixVin" runat="server"/> ¤</p>
  <p class="LinkDetailVin"><asp:hyperlink id="HyperLinkDetailVin" runat="server">Cliquer ici pour en savoir plus</asp:hyperlink></p>


'Le code est simple, est il est XHTML compliant, je gere ma mis en page via les CSS2

'Voici le code de vin.ascx.vb
Imports System.IO

Public Class Vin
    Inherits System.Web.UI.UserControl

#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

    '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

#Region " Protected Withevents "

    Protected WithEvents ImgEtiquette As System.Web.UI.WebControls.Image
    Protected WithEvents LiteralDecriptionVin As System.Web.UI.WebControls.Literal
    Protected WithEvents LiteralPrixVin As System.Web.UI.WebControls.Literal
    Protected WithEvents HyperLinkImageDetailVin As System.Web.UI.WebControls.HyperLink
    Protected WithEvents HyperLinkDetailVin As System.Web.UI.WebControls.HyperLink
    Protected WithEvents HyperLinkNomVin As System.Web.UI.WebControls.HyperLink

#End Region

#Region " Propriété "


    Private _Vin As VinClass
    Public WriteOnly Property Vin() As VinClass
        Set(ByVal Value As VinClass)
            _Vin = Value
        End Set
    End Property



#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 Not _Vin.NomVin Is Nothing Then
            HyperLinkNomVin.Text = _Vin.NomVin

            If Not _Vin.Description Is Nothing Then
                LiteralDecriptionVin.Text = _Vin.Description
            Else
                LiteralDecriptionVin.Text = "Indisponible"
            End If

            'on verra l'existence de la photo
            If Not _Vin.ImageEtiquetteUrl Is Nothing And New FileInfo(Server.MapPath(_Vin.ImageEtiquetteUrl)).Exists = True Then
                ImgEtiquette.ImageUrl = _Vin.ImageEtiquetteUrl
                ImgEtiquette.AlternateText = "Etiquette du " & _Vin.NomVin
            Else
                ImgEtiquette.ImageUrl = "#"
                ImgEtiquette.AlternateText = "Etiquette du " & _Vin.NomVin
            End If

            'on ajoute ou arrondi a 2 chiffres 
            If Not _Vin.Prix = 0 Then
                LiteralPrixVin.Text = FormatNumber(_Vin.Prix, 2)
            Else
                LiteralPrixVin.Text = "Indisponible"
            End If

            If Not _Vin.Code Is Nothing Then
                HyperLinkDetailVin.NavigateUrl = "DetailVin.aspx?vin=" & Server.UrlEncode(_Vin.Code)
                HyperLinkImageDetailVin.NavigateUrl = "DetailVin.aspx?vin=" & Server.UrlEncode(_Vin.Code)
                HyperLinkNomVin.NavigateUrl = "DetailVin.aspx?vin=" & Server.UrlEncode(_Vin.Code)
            Else
                HyperLinkDetailVin.Visible = False
                HyperLinkImageDetailVin.NavigateUrl = "#"
                HyperLinkNomVin.NavigateUrl = "#"
            End If
        Else
            'si il n'y a pas le nom du vin on continue pas plus loin ... 
            Me.Visible = False
        End If
    End Sub


End Class

#Region " Classes des vins :) "

Public Class VinClass

    Public Code As String
    Public NomVin As String
    Public Description As String
    Public LongDescription As String
    Public ImageEtiquetteUrl As String
    Public Prix As Decimal

End Class

Public Class VinClassCollection
    Inherits CollectionBase

    Default ReadOnly Property item(ByVal index As Integer) As VinClass
        Get
            Return CType(Me.List.Item(index), VinClass)
        End Get
    End Property

    Public Function add(ByVal oVinClass As VinClass) As VinClass
        Me.List.Add(oVinClass)
        Return oVinClass
    End Function

End Class

#End Region

 Conclusion

J'espere avoir été assez clair, si vous avez des question n'hésitez pas :)


Pour resumer, prenons cette fois cet exemple avec des Produits.

Je definit une classe Produit et aussi une classe de Collection de produit. Jusque la pas de problème

Ensuite dans ue de mes pages, je met tout les produits que je veux afficher dans la collection de produit.
Je boucle sur Chaque produit et j'instancie un nouveau UserControl avec en parametre ce produit :
            For Each oVinClass As VinClass In VinColl

                'on charge un nouveau UserControl et on vérifie que celui ci existe
                Dim control As Vin = New Vin
                   control = LoadControl("vin.ascx")
                   control.Vin = oVinClass

                   'On ajoute le usercontrol et une barre horizontale pour séparer les controles
                   Page.Controls.Add(control)

               Next

et dans le ascx on a une propriété de type produit, et cette propriété contient toutes les informations sur le produit, libre a nous de mettre les informations qui nous interesse sur la page

La capture d'ecran vous montre ce que ca donne au final

Maintenant si je veux rajouter un vin à la page, j'ai juste à rajouter un noeud à mon fichier xml et le reste se fait automatiquement (car j'ai décidé de peupler ma collection de vin via un fichier xml, mais ca revient au meme avec une bdd)


 Historique

07 août 2004 23:55:24 :
betise dans le titre ; custom Web Control --> User Control

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID...
Source .NET (Dotnet) RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET
Source avec Zip Source .NET (Dotnet) OPTIMISATION DE LA SERIALISATION JSON POUR LES LIST<T>
Source avec Zip Source .NET (Dotnet) CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT
Source .NET (Dotnet) POSTBACKCONTROL - COMMUNICATION CLIENT/SERVEUR AVEC LES UPDA...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) GUESTBOOK AVEC GRIDVIEW par DanMor498
Source avec Zip CHECKED DROPDOWNLIST par fredzool
Source avec Zip Source avec une capture Source .NET (Dotnet) GRIDVIEW WITH TREEVIEW AND CALLBACK par fredzool
Source avec Zip APPELLER UN WEBSERVICE DEPUIS JAVASCRIPT par fredzool
Source avec Zip Source .NET (Dotnet) MONEY TEXTBOX WITH EMBEDED JAVASCRIPT par fredzool

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) GRIDVIEW DATE PICKER JAVASCRIPT par fredzool
Source avec Zip Source .NET (Dotnet) EMPÊCHER LES ERREURS DES USERSCONTROLS DE FAIRE PLANTER TOUT... par Nurgle
Source avec Zip Source .NET (Dotnet) EVITER QUE LES ERREURS DES USERCONTROLS, ARRETENT LE FONCTIO... par jesusonline
Source avec Zip Source .NET (Dotnet) DÉCLENCHEMENT D'ÉVÉNEMENT DANS UN CONTROL UTILISATEUR ET REM... par Thanos_the_yopper
Source .NET (Dotnet) HANDLER PERMETTANT DE FAIRE UNE REQUETE SUR LES USERCONTROL ... par jesusonline

Commentaires et avis

Commentaire de fabrice69 le 07/08/2004 23:42:59 administrateur CS

Juste une petite précision. Ce n'est pas un Custom WEB Control mais un User Control.
Il y a de nombreuses différences entre ces deux types de controle utilisateur.

Regardez le site suivant pour voir les différences :
- http://msdn.microsoft.com/library/fre/default.asp?url=/library/fre/vbcon/html/vbconwebusercontrolsvscustomwebcontrols.asp

Sinon c'est pas mal.

F___

Commentaire de jesusonline le 07/08/2004 23:56:32 administrateur CS

Merci, j'ai corrigé cet etourderie

Commentaire de theaidan2 le 05/06/2007 11:17:57

Bonjour Cyril,
J'ai trouvé votre source très interressante, mais malheureusement, j'ai un pb avec les loadcontrol.

J'utilise en ce moment un ascx qui instancie dans un place holder d'autres ascx en fonction du contenu à afficher. les ascx qui sont dans le placeHolder peuvent notifier l'ascx racine que la vue a changé pour que l'ascx racine vide le placeholder et affiche dedant les nouvelles information (donc des nouveaux ascx). l'idée est de piloter une navigation maitre/détail à plusieurs niveaux dans un seul ascx, l'affichage du détail replace alors celle du maitre. le probleme est le suivant : si je met les lodcontrol("MyUserControl.ascx") trop tôt (Init), la vue ne change pas à l'évenement déclanché par l'ascx enfant, si je le met trop tard (preRender), l'évenement n'est pas déclanché du tout.
Auriez vous une idée sur la question ?
D'avance Merci.

Commentaire de jesusonline le 08/06/2007 14:28:26 administrateur CS

je te conseille de lire cet article : http://weblogs.asp.net/infinitiesloop/archive/2006/08/25/TRULY-Understanding-Dynamic-Controls-_2800_Part-1_2900_.aspx
qui t'expliquera tout comment bien faire pour ajouter des controles dynamiquement.

Commentaire de theaidan2 le 10/06/2007 15:56:23

Merci pour votre réponse.
Je vais lire cela avec attention.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

AjaxControlToolKit - ModalPopupExtender dans un ascx [ par greedium ] Bonjour,J'ai un problème dont je n'arrive pas à trouver de réference sur le Web...J'ai un ModalPopup AJAX dans un UserControl (ascx) qui est lui meme Accéder à la méthode d'un usercontrols à partir d'un autre usercontrol [ par geckoqc ] Bonjour, j'ai une page aspx (intro.aspx). Dans cette page intro.aspx, j'ai deux controls control1.ascx et control2.ascx Je voudrais, dans le code d Problème avec ma DataRowView dans mon UserControl [ par aloisio11 ] Bonjour,J'ai une erreur que je n'arrive pas a résoudre dans un UserControl.Je m'explique :J'appel mon usercontrol dans un repeater :&lt;< UPDATEPANEL + USERCONTROL [ par necnec ] Bonjour à tous,Voila j'ai une page principale en ajax enabled + un user control que j'ai ajouté en fait j'aurais que mon usercontrole controle le text Pb de UserControl [ par blueangel ] je suis entrain de créer un datagrid en code behind dans un UserControl.dans l'evenement Page_load du user Control j'ai ajouté cette ligne de code  pu Accéder à un UserControl dans le Header d'un Repeater [ par wlad952 ] Tout d'abord, bonjour !Je travail sur un site web en ASP.NET 2.0 C#. J'ai un usercontrol qui se trouve dans le header d'un repeater.J'aimerais savoir, updatepanel UserControl et triggers [ par SuperBouly ] bonjour, J'ai un usercontrol MonUserControl.ascx que j'ai doté d'évènements.J'ai d'autre part un GridView qui doit être rafraîchi lors d'un de ces évè comment utiliser du javascript dans un Usercontrol ? [ par sosou80 ] Bonjour,j'ai un usercontrol nomé : ClientFavoris.ascx , qui contient un treeview avec des checkbox a l'interieur, cet usercontrol est utilisé ds une p Répercuter un event d'une page dans un usercontrol [ par Rredeyes ] Bonjour à tous,J'ai une page qui est contenue dans une master page. cette master page contient des boutons edit-new-delete.Dans la page, je charge dyn Problème updatepanel dans userControl [ par bizibiz17 ] Bonjour,J'ai un problème avec un update panel qui ne "marche pas".En gros j'ai un usercontrol dans lequel il y a un autocompleter qui fonctionne corre


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales