Generer des controles dynamiquement et recuperer leurs evenement et leurs valeurs

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 012 fois - Téléchargée 30 fois

Contenu du snippet

Ce bout de code nous montre comment créer et gerer dynamiquement des controles

Plusieurs cas sont etudiés:
- Comment fait on pour gerer les evenements
- Comment fait on pour avoir accés au propriétés des controles dynamique

J'ai placé les controles dans un placeholder ce qui epure tres netemment le coté aspx

Source / Exemple :



                • Recuperer Valeur Textbox Dynamique.aspx**********
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Recuperer Valeur Textbox Dynamique.aspx.vb" Inherits="TestExemple.MaPage"%> <html> <head> <title>Generer des controles dynamiquement et recuperer leurs evenement et leurs valeurs </title> </head> <body> <form id="Form1" method="post" runat="server"> <asp:placeholder id="PlaceHolder1" runat="server" /> </form> </body> </html>
                • Recuperer Valeur Textbox Dynamique.aspx.vb**********
Public Class MaPage Inherits System.Web.UI.Page Protected WithEvents PlaceHolder1 As System.Web.UI.WebControls.PlaceHolder Protected MonRadioButton As New System.Web.UI.WebControls.RadioButtonList Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'On ajoute un peu de text au PlaceHolder PlaceHolder1.Controls.Add(New LiteralControl("Déclenchement de l'evenement")) 'On Configure notre RadiobuttonList MonRadioButton.RepeatDirection = RepeatDirection.Horizontal MonRadioButton.Width = Unit.Pixel(400) MonRadioButton.DataSource = Split("Click,OnChanged", ",") MonRadioButton.DataBind() MonRadioButton.SelectedIndex = 0 'Par Défaut on dit que si il change on recharge la page MonRadioButton.AutoPostBack = True PlaceHolder1.Controls.Add(MonRadioButton) Dim MonTextBox As TextBox 'On fait une boucle pour mettre 10 Textbox For i As Integer = 0 To 10 'On reinstancie le texbox 'et on le configure MonTextBox = New TextBox MonTextBox.ID = "TonTextbox" & i MonTextBox.Text = MonTextBox.ID 'Si le radiobutton est sur onchanged If MonRadioButton.SelectedValue = "OnChanged" Then 'On dit que des que le texbox change il fait un postback MonTextBox.AutoPostBack = True 'Quand le textbox change il execute MonTextBox_TextChanged AddHandler MonTextBox.TextChanged, AddressOf MonTextBox_TextChanged End If 'On ajoute notre textbox dans le Placeholder puis un saut de ligne PlaceHolder1.Controls.Add(MonTextBox) PlaceHolder1.Controls.Add(New LiteralControl("<br>")) Next 'On en a plus besoin donc on peut l'enlever de la memoire MonTextBox.Dispose() 'Si on est sur click If MonRadioButton.SelectedValue = "Click" Then 'On va rajouter un bouton Dim LeBouton As New Button LeBouton.Text = "valider" 'On lie le click du bouton à l'evenement on l'ajoute au placeholder AddHandler LeBouton.Click, AddressOf LeBouton_Click PlaceHolder1.Controls.Add(LeBouton) End If End Sub Private Sub MonTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) 'On crée un nouveau textbox Dim LeTextBox As New TextBox 'On Assigne notre nouveau textbox, avec l'objet qui nous a envoyé ici 'On voit ainsi l'importance de sender LeTextBox = CType(sender, TextBox) 'Un peu de text pour verifier que ca marche bien Response.Write("Vous venez de modifié : " & LeTextBox.ID & " avec la valeure : " & LeTextBox.Text) End Sub Private Sub LeBouton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim LeTextBox As TextBox For i As Integer = 0 To 10 Try 'idem que si dessus sauf que la on cherche le textbox 'dans la page, on fait donc une boucle sur tous les 10 textbox LeTextBox = New TextBox LeTextBox = CType(Page.FindControl("TonTextbox" & i), TextBox) 'Un peu de text Response.Write("Texbox N°" & i & " : " & LeTextBox.Text & "<br>") Catch ex As Exception 'Une connerie vient d'etre faite 'Surement parce que le texbox recherché n'existe pas End Try Next End Sub End Class

Conclusion :


Je suis en code behind, j'ai fait ca dans VS.net 2003, j'ai une assembly qui s'appelle TestExemple
Si vous avez des questions n'hesitez pas
J'ai essayé de commenter un peu le code, mais il y a pas grand chose à commenter

Mettez moi une note ca fait toujours plaisir

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
20 septembre 2010

ce code est une pure merveille mais ce que je voudrais moi c'est:
afficher les questions et les proprositions de reponse d'un questionnaire qui figure dans une bd oracle 10g.Les propositions sont en faite des checkbox qui une fois coches doivent etre comparer a la bonne reponse qui elle aussi figure ds la bd.Je t'en suppli repond moi
Messages postés
1
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
6 juin 2011

Merci pour ce code qui m'a été très utiles :)
Messages postés
7
Date d'inscription
mercredi 24 octobre 2007
Statut
Membre
Dernière intervention
20 décembre 2007

Bonjour,
J'étais en plain déséspoir dans mon projet quand j'ai trouvé ton code ! ton code m'a bien aidé et avec les commentaires des autres personnes j'ai trouvé exactement ce qu'il me fallait !

J'ai enfin débloqué mon code ! (c'est mon chef qui va être content !!)

Merci beaucoup
Messages postés
5
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
29 janvier 2010

J'ai trouvé !
Alors en cherchant, je me suis aperçu que mon problème venait de l'utilisation d'un contrôle Table
et en multipliant la petite fonction donnée au dessus, j'ai retrouvé mes controles dans des controles Row et Cell de mon Table.

Donc, j'ai modifié la création de mes controles dynamiques pour les mettre dans un place holder avec des LiteralControl pour générer mon tableau de mise en page et j'ai viré le controle Table.
Messages postés
5
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
29 janvier 2010

Alors en fait, lorsque je liste mes controles :

' TableauTransport est le Control Table où je range mes controles dynamiques
For Each ctrl In TableauTransports.Controls
Response.Write("toto : " & ctrl.ID & "
")
Next

J'ai bien en résultat 8 lignes avec toto : qui s'affichent mais derrière, rien. Comme si dans la page, les controles n'avaient pas de Nom (quand je regarde le source, il ont bien un nom, et à la création, je donne bien un ID (je peux meme l'afficher).

Je suis vraiment perdu ...

Merci.
Afficher les 20 commentaires

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.