begin process at 2012 05 28 14:13:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

WebForms

 > 

UserControl

 > 

[VB.NET] Suppression d'un UserControl dynamiquement


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[VB.NET] Suppression d'un UserControl dynamiquement

lundi 7 août 2006 à 16:52:46 | [VB.NET] Suppression d'un UserControl dynamiquement

Glumph

Bonjour à tous,

J'essaie de créer un formulaire dynamiquement, à partir d'un usercontrol.
J'ai une page "Main" possédant un Panel et un bouton Ajouter. A chaque clic sur ce bouton, un UserControl s'ajoute à mon Panel.
Chaque UserControl est composé d'une textbox et d'un bouton "Supprimer", qui aurait pour fonction de... supprimer le UserControl du Panel.

Scénario classique: j'ajoute quelques usercontrols en cliquant sur le 1er bouton, je remplis ensuite quelques textbox... et je supprime un de ces usercontrols... Malheureusement, je n'arrive pas à maitriser cet événement: essayez vous-même, ma procédure ne supprime pas toujours le Usercontrol voulu... D'ailleurs, elle ne supprime pas toujours un Usercontrol tout court!!!
Pourtant j'ai bombardé de msgbox pour m'afficher les valeurs de mes variables à certains moments stratégiques...

Voilà un copier-coller de mon code:

Fichier AlbumNouveau.aspx:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="AlbumNouveau.aspx.vb" Inherits="Albums_AlbumNouveau" %>

<%@ Reference Control="AjoutePhoto.ascx" %>
<!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 id="Head1" runat="server">
    <title>Arch[i]mages</title>
    <link rel="stylesheet" type="text/css" href="../Design/stylesheet.css">
</head>
<body>
    <form id="form1" runat="server">
        <p>
            &nbsp;</p>
        <table border="1" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%">
            <tr>
                <td style="vertical-align: text-top; text-align: center;" width="20%">
                    &nbsp;&nbsp;&nbsp;
                </td>
                <td style="text-align: center">
                    <h2>
                    Nom du nouvel album</h2>
                    <br />
                    <br />
                    <table style="width: 100%">
                        <tr>
                            <td width="25%" style="text-align: left" valign="top">
                                Nom de l'album:<br />
                    <asp:RequiredFieldValidator ID="Validator1" runat="server" ControlToValidate="txtAlbumNom"
                        ErrorMessage="(requis)"></asp:RequiredFieldValidator></td>
                            <td style="width: 100px">
                                <asp:TextBox ID="txtAlbumNom" runat="server" ToolTip="Entrez ici le nom de l'album photo à créer"
                                    Width="100%" Wrap="False"></asp:TextBox></td>
                            <td style="width: 100px; text-align: right">
                                Catégorie:</td>
                            <td style="width: 100px">
                        </tr>
                        <tr>
                            <td style="height: 55px; text-align: left;" width="25%" valign="top">
                                Description:<br />
                    <asp:RequiredFieldValidator ID="Validator2" runat="server" ControlToValidate="txtResume"
                        ErrorMessage="(requis)"></asp:RequiredFieldValidator></td>
                            <td colspan="3" style="height: 55px">
                                <asp:TextBox ID="txtResume" runat="server" Height="100%" TextMode="MultiLine" ToolTip="Entrez ici une description du contenu de l'album"
                                    Width="100%"></asp:TextBox></td>
                        </tr>
                        <tr>
                            <td width="25%" style="text-align: left" valign="top">
                                Lien externe:<br />
                    <asp:RegularExpressionValidator ID="Validator3" runat="server" ControlToValidate="txtHyperlink"
                        ErrorMessage="(non valide)" ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"></asp:RegularExpressionValidator></td>
                            <td colspan="3">
                                <asp:TextBox ID="txtHyperlink" runat="server" Width="100%" Wrap="False"></asp:TextBox></td>
                        </tr>
                    </table>
                    <br />
                    <table style="width: 95%">
                        <tr>
                            <td style="height: 18px" width="80%">
                                Nombre de photos à ajouter:
                                <asp:Label ID="lblNbPhotos" runat="server" Text="lblNbPhotos"></asp:Label></td>
                            <td style="height: 18px" width="20%">
                                <asp:Button ID="btnAjouter" runat="server" Text="Ajouter" ToolTip="Cliquez ici pour ajouter une photo" CausesValidation="False" /></td>
                        </tr>
                    </table>
                    <asp:CustomValidator ID="Validator4" runat="server" ErrorMessage="Vous devez proposer au moins une photo"></asp:CustomValidator><br />
                    &nbsp;<br />
                    <asp:Panel ID="pnlPhotos" runat="server" Height="250px" ScrollBars="Vertical" Width="100%">
                    </asp:Panel>
                    <hr />
                    <asp:Button ID="btnValidate" runat="server" Text="Envoyer" /></td>
            </tr>
        </table>
    </form>
</body>
</html>


Fichier AlbumNouveau.aspx.vb:
Partial Class Albums_AlbumNouveau
    Inherits System.Web.UI.Page

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        Dim i As Integer
        If Session.Item("Control") IsNot Nothing Then
            For i = 1 To Session.Item("Control")
                CreateControl("Photo" & i.ToString)
            Next
        Else
            Session.Add("Control", 0)
            Me.lblNbPhotos.Text = "Aucune"
        End If
    End Sub

    Protected Sub btnAjouter_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAjouter.Click
        Session.Item("Control") += 1
        Me.lblNbPhotos.Text = Session.Item("Control").ToString
        CreateControl("Photo " & Session.Item("Control"))
    End Sub

    Protected Sub CreateControl(ByVal ID As String)
        Dim pnlDetailPhoto As New ASP.AjoutePhoto, lblBr As New Label, lblID As Label
        pnlDetailPhoto.ID = ID
        Me.pnlPhotos.Controls.Add(pnlDetailPhoto)
        AddHandler pnlDetailPhoto.Destroy, AddressOf RetirePhoto

        lblID = pnlDetailPhoto.FindControl("lblID")
        lblID.Text = ID
        lblBr.ID = "Saut" & ID
        lblBr.Text = "<br>"
        Me.pnlPhotos.Controls.Add(lblBr)
    End Sub

    Protected Sub btnValidate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnValidate.Click
        'Vérification qu'une photo au moins est ajoutée
        If Session.Item("Control") = 0 Then
            Me.Validator4.Validate()
        End If
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.lblNbPhotos.Text = Session.Item("Control").ToString
    End Sub

    Private Sub RetirePhoto(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim pnlDetailPhoto As ASP.AjoutePhoto
        Dim objFileUpload As FileUpload
        pnlDetailPhoto = sender
        MsgBox("Procédure Sub RetirePhoto(" & pnlDetailPhoto.ID.ToString & ")")
        objFileUpload = pnlDetailPhoto.FindControl("objFileUpload")
        If objFileUpload.FileName <> "" Then
            'Demande confirmation
            If MsgBox("Etes-vous sûr de vouloir supprimer cette photo ?", MsgBoxStyle.YesNo, "Avertissement") = MsgBoxResult.Yes Then
                MsgBox("La photo " & pnlDetailPhoto.ID.ToString & " sera supprimée", MsgBoxStyle.OkOnly, "Ok")
            End If
        End If
        Session.Item("Control") -= 1
        MsgBox("Reste " & Session.Item("Control").ToString & " controls")
        objFileUpload.Dispose()

    End Sub

End Class


Fichier AjoutePhoto.ascx:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="AjoutePhoto.ascx.vb" Inherits="Albums_AjoutePhoto" ClassName="AjoutePhoto"%>
<table width="95%">
    <tr>
        <td rowspan="4" width="25%">
            <asp:Image ID="Image1" runat="server" ToolTip="Photo" />
            <br />
            <asp:Label ID="lblID" runat="server" Text="Label"></asp:Label></td>
        <td width="50%">
            <asp:FileUpload ID="objFileUpload" runat="server" Width="100%" /></td>
        <td width="10%">
            <asp:Button ID="btnSupprimer" runat="server" Text="Supprimer" ToolTip="Supprimer cette photo" CausesValidation="False" /></td>
    </tr>
    <tr>
        <td colspan="2">
            Titre:</td>
    </tr>
    <tr>
        <td colspan="2" rowspan="2" style="height: 26px">
            <asp:TextBox ID="txtTitre" runat="server" ToolTip="Ajoutez ici le texte à insérer sous la photo"
                Width="100%" Wrap="False"></asp:TextBox></td>
    </tr>
    <tr>
    </tr>
</table>
<br />
<br />
<hr />


Fichier AjoutePhoto.ascx.vb:
Public Class Albums_AjoutePhoto
    Inherits System.Web.UI.UserControl

    Public Event Destroy(ByVal sender As Object, ByVal e As System.EventArgs)

    Protected Sub btnSupprimer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSupprimer.Click
        RaiseEvent Destroy(Me, New System.EventArgs)
    End Sub
End Class


Ca me rendrait un grand service si vous pouviez jeter un coup d'oeil là-dessus, je tourne en rond depuis une semaine...!

Merci
lundi 7 août 2006 à 23:16:46 | Re : [VB.NET] Suppression d'un UserControl dynamiquement

jesusonline

Membre Club Administrateur CodeS-SourceS
Bonsoir,

MsgBox ??? tu sais qu'il y a des options un peu mieux pour faire du debug ... utilises au moins le trace.write ou alors tu peux regarder ce tutorial http://www.aspfr.com/tutoriaux/DEBUG-ASP-NET-AVEC-VISUAL-STUDIO_384.aspx 

Pour ton problème, il faut absolument rajouter les controles dynamique dans le page_init sinon les events ne seront pas déclenché ... j'ai pas regardé le code mais je pense que c'est pour ca que cela plante ...


Cyril - MVS - MCP
mardi 8 août 2006 à 01:20:05 | Re : [VB.NET] Suppression d'un UserControl dynamiquement

Glumph

Oui oui je te remercie du conseil, évidemment j'ai aussi utilisé les points d'arrêts etc...

Par contre je ne comprends pas bien ta remarque concernant les contrôles dynamiques...? J'ai justement une boucle dans mon Page_Init qui s'en charge:
For i = 1 To Session.Item("Control")
   CreateControl("Photo" & i.ToString)
Next

Ce n'est pas "suffisant" ?

Merci de ton aide... [:p]

mardi 8 août 2006 à 09:18:10 | Re : [VB.NET] Suppression d'un UserControl dynamiquement

jesusonline

Membre Club Administrateur CodeS-SourceS
Je viens de rapidement regardé ton code. Il ne faut pas utiliser MsgBox !!! msgbox ouvre une popup en local sur le serveur mais absolument pas sur le client donc une partie de ton code ne fonctionera pas ...

Je ne comprend pas ou tu supprimes ton UserControl, tout ce que tu fais c'est décrementer ta variable session lors du remove ... ce qu'il faudrais c'est mettre un visible=false sur ton contrôle pour qu'il ne soit plus présent ...

Je n'ai pas compris pourquoi tu passes par ca, j'ai l'impression que tu es en train de recréer un repeater ou datalist ... ce serait surement plus simple de les utiliser :-)


Cyril - MVS - MCP
mardi 8 août 2006 à 14:36:38 | Re : [VB.NET] Suppression d'un UserControl dynamiquement

Glumph

Ben en fait ce que je cherche à faire, c'est une interface pour permettre à des utilisateurs d'uploader une série de photos, en vue de créer un album.

Chaque usercontrol rassemblera des infos sur une photo, essentiellement le chemin du fichier à uploader sur le serveur et un nom associé à la photo. En plus donc de ces deux contrôles, un bouton "Supprimer" permettra d'éliminer une seule des n photos que l'utilisateur voudra uploader.

Je ne sais pas si je m'y prends bien: si tu as une autre solution, je suis prenneur aussi! Quoique j'aimerais bien quand même comprendre pourquoi je n'arrive pas à mes fins...

En plus de décrémenter ma variable, je fais aussi un objFileUpload.Dispose(): ce n'est pas bon?
Enfin, comment je pourrais utiliser un Repeater sans connaître le nombre de photos que l'utilisateur voudra uploader, tout en lui permettant à tout moment de supprimer une des photos qu'il voulait enregistrer...?

mardi 8 août 2006 à 14:43:31 | Re : [VB.NET] Suppression d'un UserControl dynamiquement

jesusonline

Membre Club Administrateur CodeS-SourceS
objFileUpload.Dispose() a mon avis ca ne sert à rien :s essaye en le mettant à visible=false on en le supprimant de la collection de controls.

pour ce qui est du repeater, dés que j'ai une liste je l'utilise :-) c'est beaucoup plus simple, mais ca devrait aussi fonctionner comme tu fais.


Cyril - MVS - MCP


Cette discussion est classée dans : end, system, control, session, pnldetailphoto


Répondre à ce message

Sujets en rapport avec ce message

Session_End et Server.MapPath [ par darunia ] Salut,Lors de la fermeture de session, je veux effacer un dossier :System.IO.Directory.Delete(Server.MapPath("temp/" + Session.SessionID), true); Récupérer une valeur d'un Control User acsx dans un Label [ par ryckbosch ] Bonjour,Je ne sais pas si j'utilise correctement le passage des variables entre un Control User (Nbre_Sites.ascx) et la page qui l'appelle (Test.aspx) Probleme Fin de Session [ par visualresine ] Bonjour,Je voudrais qu'en fin de session mon site affiche une messagbox puis ensuite qu'il renvoie automatiquement sur le page de login.J'ai donc ecri Castage Automatique??? [ par Coolpix08 ] Bonjour voila encore une question sur les typesJ'ai réussi à lister tous mes controls, à prendre le type Control comme base pour n'importe quel type.L débutant en asp.net - pb navigation dans dataview [ par bdl20042000 ] Bonjour, je débute en asp.net. Je souhaite avoir les mêmes facilités de navigation que avec un recordset sous VB. Aussi après avoir regarder un peu le Perte d'une session anormalement [ par lucie12 ] Bonjour,J'ai un formulaire qui ajoute des données dans une base. Lorsque je clique sur le bouton ajouter, il m'insere les infos et met certaines varia usercontrole : La référence d'objet n'est pas définie à une instance d'un objet. [ par coulis ] Bonjour à tous,Voilà mon problème: je viens de créer une nouvelle application .net et j'ai l'erreur suivante dès que je positionne un usercontrol ? La La référence d'objet n'est pas définie à une instance d'un objet [ par buze63 ] Salut G une page aspx avec un bouton et un usercontrol qui possede un label et un textbox et je voudrai que lorsque je clic sur le bouton un message a [ASP.NET][C#] récupérer un événement click d'un custom web control [ par outcast_fr ] Bonjour, j'ai créé un petit custom web control (pas de user control) composé d'un label et d'un bouton. Mon but c'est de récupérer l'événement associé Variable session et user control [ par StephaneNet ] Bonjour à tous,J'ai un petit soucis et peut etre pourrez vous m'aider. J'ai un user control  sur la page company.asp  avec un lien vers ma page d'accu


Nos sponsors


Sondage...

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 : 4,009 sec (3)

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