Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GENERER DES CONTROLES DYNAMIQUEMENT ET RECUPERER LEURS EVENEMENT ET LEURS VALEURS


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous : ajout, dynamique, controle, init, event Niveau : Débutant Date de création : 17/03/2004 Vu : 15 276

Note :
8,92 / 10 - par 13 personnes
8,92 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note


Description

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

  • ********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
********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
 

Commentaires et avis

signaler à un administrateur
Commentaire de arcollet le 15/06/2004 13:00:36

Bonjour,

Auriez vous un exemple de ce même code mais dont le radiobuttonlist serai un TemplateColumn intégré à un datagrid dont la source serait un datareader. Comment dans ce cas répercuter la mise à jour d'une telle colonne (TemplateColumn/RadioButtonList) dans la base de donnée.

Merci de votre aide

Denis

signaler à un administrateur
Commentaire de seb7272 le 16/08/2004 15:39:11

Bonjour,
Ce code fonctionne très bien,  il m'a été très utile.
Mais je cherche encore plus :
-->avec un datalist alimenté par base de données.
je voudrais créer des boutons par enregistrement en fonction des données envoyées.
Avez vous une idée ?

Sébastien

signaler à un administrateur
Commentaire de SuperBouly le 18/08/2004 19:24:55

Bonjour,
Pourquoi mes textbox créées disparaissent au postback, et refusent donc de rendre l'info que j'ai rentrée ?
Je précise que ma page est faite sous DreamWeaver et que mes textbox sont créées dans le footer d'un datagrid, mais que j'ai essayé dans un PlaceHolder, ça me fait pareil .
Merci pour un tuyau...

signaler à un administrateur
Commentaire de nitrique le 06/12/2004 09:37:20

N'y a t-il pas moyen de se passer du placeHolder ?

Je cree un composant dans une string et je n'arrive pas à récuperer sa valeur.

signaler à un administrateur
Commentaire de martok le 23/11/2005 10:26:28

Bonjour,
ton code est intéressant. Par contre j'arrive pas trop à comprendre pourquoi, l'évènement MonTextBox_TextChanged semble ne pas se déclancher.
En tout cas, ta source me dépanne.
Félicitations.

signaler à un administrateur
Commentaire de jesusonline le 23/11/2005 10:48:37 administrateur CS

l'évenement textchanged se déclenche ssi la propriété autopostback est à true ce qui est heureusement pas le cas par défaut ... car cela fait un posbtack a chaque fois que le textbox change :s

signaler à un administrateur
Commentaire de martok le 23/11/2005 12:26:49

Ok je vois.
C'est cool ta source va être un bon point de départ pour mon taf.

signaler à un administrateur
Commentaire de trenaud le 30/01/2006 11:20:04

Bonjour,

J'ai étudié le code proposé avec intérêt. Cependant, je souhaiterais faire quelque chose d'un peu différent : plutôt que de renvoyer la valeur d'un contrôle textBox dès qu'il change, je souhaiterai que l'ensemble des valeurs des textbox créés dynamiquement soit renvoyé au serveur par un bouton qui "submit" le formulaire.
Or en faisant comme cela, tout les contrôles créés dynamiquement disparaissent dès que le formulaire est retourné au serveur...

Si quelqu'un a une idée pour résoudre mon problème, je l'en remercie par avance !!

signaler à un administrateur
Commentaire de jesusonline le 30/01/2006 11:27:25 administrateur CS

Bonjour,

il faut rajouter tes controles dans le init de la page :)

signaler à un administrateur
Commentaire de trenaud le 30/01/2006 12:04:57

Réponse à moi-même...

En fait, je n'avais pas compris qu'il fallais regénérer les contrôles dynamiques, même dans le cas d'un postback.

Donc si je reprends l'ensemble de la chaine client/serveur, voici ce qui se passe :
1° Premier appel d'une page : génération des contrôles dynamiques
2° modification des valeurs des champs dynamiques côté client
3° le client poste le formulaire
4° le serveur regénère la page, avec recréation des contrôles dynamiques à leurs valeurs initiales
5° le serveur affecte automatiquement toutes les valeurs de tous les champs renvoyés par le client (effectué après l'évennement "PAGE_LOAD").

Si au niveau du point 5 les contrôles dynamiques n'ont pas été recréés, forcément le serveur ne peut pas leur affecter les valeurs renvoyées par le client... et donc on n'a pas accès à ces contrôles puisqu'ils n'existent plus...

J'avais pourtant épluché toutes les docs disponibles sur la génération des pages web en ASPX, mais il semble que cette particularité n'y soit pas expliquée. J'espère que cette petite explication servira à d'autres.

Cordialement, Tristan.

signaler à un administrateur
Commentaire de odenis59 le 28/02/2006 09:48:13

Bonjour,
je confirme bien ton post sur la methode de gestion des controles dynamiques de Trenaud.

toutefois me voila face à un probleme : comment faire si ma premiere page contient 5 boutons , recupere la valeur du bouton cliqué, mais aussi dans le meme post renvoyer la paga aux client sans le bouton cliqué (donc 4 boutons).

cela me semble pour l'instant impossible, car comment dans le meme post a la fois creer un bouton et recuperer l' event et le supprimer ?

signaler à un administrateur
Commentaire de jesusonline le 28/02/2006 09:54:53 administrateur CS

Il n'y a rien qui me semble impossible, dans le render de la page tu fais un tonbutton.visible = false :)

signaler à un administrateur
Commentaire de odenis59 le 28/02/2006 10:02:07

ouep mais cela retire un peu l'interet de la création dynamique ..?

Imaginons que je cree 100 boutons, puis au post suivant j'en ai plus besoin que de 5 quel est l'interet d'en creer 95 'pour rien' cela  a quand meme des implications sur la performance.

d'autant plus que je vais devoir creer autant de bouton à chaque post que de max de boutons creer au cours de la vie de la page.

ps : cela ne remet pas en cause la qualite de ton source ;)

signaler à un administrateur
Commentaire de fredo_lefran le 06/07/2006 16:03:38

Bonjour,

j'ai vu ton bout de code.

J'essaie de faire la même chose et je ne récupère aucun control. En fait quand je clique sur le bouton, je n'accède a aucun control!

Quand je fais le code qui suit après la creation des textbox :
TextBox test = new TextBox();
test = (TextBox)Page.FindControl("accountnumber");
Response.Write("kljhkj"+test.Text + "");

il trouve bien mais si je fais le même code dans le click de mon bouton il ne le trouve pas.

Aurais-tu une idée?

merci d'avance

signaler à un administrateur
Commentaire de webtof le 21/05/2007 11:42:13

Bonjour,

Je cherche depuis plusieurs jours à récupérer les valeurs de mes textbox générés dynamiquement.
Je les crée dans Page_Init mais lorsque je fais le FindControl il ne les trouve pas.
Le Find Control se fait dans le On_click d'un bouton.

Je ne comprend pas pourquoi le control TextBox n'existe pas lors du lancement de la sub OnClick.
merci pour l'aide.

signaler à un administrateur
Commentaire de webtof le 21/05/2007 12:27:03

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 & "<br>")
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.

signaler à un administrateur
Commentaire de webtof le 21/05/2007 13:24:28

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.

signaler à un administrateur
Commentaire de nindy13 le 19/11/2007 16:15:45 10/10

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

signaler à un administrateur
Commentaire de BoueK le 07/03/2008 16:18:25

Merci pour ce code qui m'a été très utiles :)

signaler à un administrateur
Commentaire de maripol le 11/11/2008 17:45:38

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Ajout de lien dynamique dans le texte [ par jcq ] Bonjour,est-ce que quelqu'un connait un moyen simple et rapide de transformer tous les liens http://XXXXXX, ftp:XXXXX, email@XXXXX qui se trouvent dan Probleme avec un PostBack et controle dynamique [ par snakpak123 ] Bonjour,j'ai un problème avec la génération de contrôle dynamique et le Postback. Je genère une table dynamique avec du texte et 2 boutons(Édition et ajout dynamique d'une <div> c# [ par lilippx ] bonjour, mon petit probleme, je cherche à ajouter dynamique ment une div, ce que je fais : LiteralControl nouvelleSemaine=new LiteralControl("&lt;div Ajout Dynamique silverlight [ par DCWeb ] Bonjourj'aimerai savoir si il y possible d'ajouter de façon dynamique des contrôles (bouton, ligne, ....) depuis le code_behind avec silverlight 2si c Mettre à jour text d'un controle de facon dynamique [ par puman ] Bonjour,Dans ma page ASP .Net, je vais rechercher une liste dans ma BD Access qui contient 4 noms. A partir de ces 4 noms je voudrais afficher 4 contr forum dynamique en asp [ par boumrim ] Comment je peux réaliser un forum dynamique en asp avec une base de données access Tableau et contrôleur dynamique en ASP.NET [ par tremiesoj ] Bonjour,je suis actuellement en train de développer une page web en ASP.NET (en C#) avec BDD SQLServer.bref, je voudrais sur cette page un tableau dyn UpdatePanel recursifs [ par nmathon ] Bonjour,Je rencontre une difficulté avec les UpdatePanel lorsqu'ils sont définis dans un controle utilisateur susceptible d'être ajouté récursivement ModalPopupExtender: Chargement dynamique des informations [ par jabcoco25 ] Bonjour, je suis dans un context ou j'ai besoin d'afficher le détail d'un item lors d'un click d'un bouton dans un "Modalpopup extender" de ajax .net. Trouvez le controle qui a envoyé le page.postback [ par BrokenArrow29 ] Salut,Comment je pourrais faire pour trouver quel controle (Linkbutton) qui a provoqué un page postback. Car dans certains cas j'aimerais loader des c


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.