IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

récupération champs txtbox crées dynamiquement


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut récupération champs txtbox crées dynamiquement
    Bonjour à tous,

    Je bloque actuellement sur le problème suivant: j'ai une liste à choix multiple et un bouton OK. Lorsque l'on clique sur le bouton OK, on procède à la création d'autant de txtbox que de valeurs selectionnées dans la liste et on affiche un nouvo bouton Next. Lors du clic sur Next je voudrais pouvoir récupérer les valeurs contenues dans mes txtbox mais comme elles ont été faites dynamiquement, je ne sais pas du tout comment procéder

    Quelqu'un aurait-il une idée pour palier à mon problème svp ?

    Merci

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    La question a été traitée à plusieurs reprises sur le forum, fais une recherche

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Quand tu crées les TextBox dynamiquement, il faut les "sauvegarder" quelque part, dans une List ou un Dictionary (plus pratique pour accéder à un élément par son nom) par exemple:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim controls As New Dictionary(Of String, TextBox)
    Dim t As TextBox
    t = New TextBox()
    ...
    ' (Initialisation de t)
    ...
    controls.Add(t.Name, t)
    Ensuite, pour accéder à celle qui s'appelle "toto":
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim t As TextBox
    t = controls("toto")

    Note: si tu as non seulement des TextBox mais aussi d'autres types de contrôle, déclare plutôt controls en Dictionary(Of String, Control). Pas de changement pour l'ajout, mais il faudra convertir la valeur récupérée:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim t As TextBox
    t = CType(controls("toto"), TextBox)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup pour ton aide, cependant je rencontre une erreur, voici mon code :


    Je déclare le dictionary tout en haut de ma page pour pouvoir y avoir acces dans plusieurs sub:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Private dictio As New Dictionary(Of String, TextBox)
    Ensuite dans ma sub de clic sur bouton OK j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    For i = 0 To Me.ListBox2.Items.Count - 1
                    If Me.ListBox2.Items.Item(i).Selected Then
     Dim txtbox(i) As TextBox
                        txtbox(i) = New TextBox
                        txtbox(i).ID = Me.ListBox2.Items.Item(i).Value
     
                        'MsgBox(txtbox(i).ID)
                        dictio.Add(txtbox(i).ID, txtbox(i))
     
     
                        Me.Panel2.Controls.Add(lbl(i))
                        Me.Panel2.Controls.Add(dictio(txtbox(i).ID))
     
                    End If
                Next
    Ensuite une fois les textbox remplis, lors du clic sur Next j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For i = 0 To Me.ListBox2.Items.Count - 1
                If Me.ListBox2.Items.Item(i).Selected Then
    Dim t As TextBox
     
                    'MsgBox(Me.ListBox2.Items.Item(i).Value)
                    t = dictio(Me.ListBox2.Items.Item(i).Value)
     End If
     
            Next
    Comme tu peux le voir, les boucles sont identiques dans les 2 sub, mais quand il exécute le t = dictio(Me.ListBox2.Items.Item(i).Value) il me dit : The given key was not present in the dictionary alors que les msgbox me montrent que l'ID devrait bien exister dans le dictionary.

    As-tu une idée sur la raison de ce plantage ?

    Merci

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Quand tu fais "Dim txtbox(i) As TextBox", ça déclare un tableau de TextBox de taille i... ce n'est pas ce que tu souhaites je pense ! Il faut mettre cette instruction avant la boucle et remplacer i par Me.ListBox2.Items.Count.
    D'ailleurs tu n'as pas besoin d'un tableau, tu peux utiliser une simple variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    For i = 0 To Me.ListBox2.Items.Count - 1
                    If Me.ListBox2.Items.Item(i).Selected Then
                        Dim txtbox As TextBox
                        txtbox = New TextBox
                        txtbox.ID = Me.ListBox2.Items.Item(i).Value
     
                        'MsgBox(txtbox.ID)
                        dictio.Add(txtbox.ID, txtbox)
     
     
                        Me.Panel2.Controls.Add(lbl(i))
                        Me.Panel2.Controls.Add(dictio(txtbox.ID))
     
                    End If
                Next
    Je ne sais pas si c'est ça la cause du problème, mais ça me semble mieux comme ça...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Non effectivement cela ne règle pas le problème mais j'apprécie ton aide et la clarté de tes réponses merci

  7. #7
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Qd tu cliques sur Next, ça crée un PostBack et tes textbox précédemment créés sont perdues je pense

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    et c'est possible de remédier à ça ?

Discussions similaires

  1. [AJAX] Enlever le champ d'une table crée dynamiquement
    Par jean christophe dans le forum AJAX
    Réponses: 2
    Dernier message: 09/02/2011, 12h58
  2. Réponses: 10
    Dernier message: 20/12/2010, 15h02
  3. Réponses: 2
    Dernier message: 13/02/2008, 12h43
  4. [MySQL] champ qui crée liste de mots (champ dynamique)
    Par cari dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 10/08/2006, 10h34
  5. Réponses: 5
    Dernier message: 06/03/2006, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo