[VB.NET] Suppression d'un UserControl dynamiquement
Glumph
Messages postés9Date d'inscriptionlundi 14 juillet 2003StatutMembreDernière intervention13 août 2006
-
7 août 2006 à 16:52
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
8 août 2006 à 14:43
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...
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 = "
"
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"%>
----
,
,
,
----
Titre:,
----
,
----
<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
A voir également:
[VB.NET] Suppression d'un UserControl dynamiquement
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 ...
Glumph
Messages postés9Date d'inscriptionlundi 14 juillet 2003StatutMembreDernière intervention13 août 2006 8 août 2006 à 01:20
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
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 août 2006 à 09:18
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 :-)
Glumph
Messages postés9Date d'inscriptionlundi 14 juillet 2003StatutMembreDernière intervention13 août 2006 8 août 2006 à 14:36
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...?
Vous n’avez pas trouvé la réponse que vous recherchez ?