Récupérer la valeur d'un textBox crée dynamiquement [Résolu]

said_dias_01 103 Messages postés dimanche 20 mars 2005Date d'inscription 30 décembre 2017 Dernière intervention - 29 déc. 2013 à 13:54 - Dernière réponse : cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention
- 3 janv. 2014 à 18:01
Salut , Bonne Année
Mon application sur asp.net (Webform)
j'ai crée un zone de text dynamiquement


Quand je mette ce code en (Page_Load) il fonctionne bien
Protected Sub Page_Load(ByVal sender As Object, ByVal e As ....
          Dim txt As New TextBox
          txt.ID = "txt" & 1
          txt.Text = "ABC"
          Panel1.Controls.Add(txt)
   End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal....
        Dim TB As TextBox = DirectCast(Me.Panel1.FindControl("txt1"), TextBox)
        Label1.Text = TB.Text
    End Sub

Il affiche ABC dans Label1

Le Problem

Quand je désactive l'événement (Page_Load) et je mette le code sur un evenement Button2_Click
Protected Sub Button2_Click(ByVal sender As Object, ByVal....
Dim txt As New TextBox
          txt.ID = "txt" & 1
          txt.Text = "ABC"
          Panel1.Controls.Add(txt)
    End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal....
        Dim TB As TextBox = DirectCast(Me.Panel1.FindControl("txt1"), TextBox)
        Label1.Text = TB.Text
    End Sub

Bug : La référence d'objet n'est pas définie à une instance d'un objet. (sur la ligne Label1.Text = TB.Text )
Afficher la suite 

Votre réponse

7 réponses

cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 29 déc. 2013 à 17:53
0
Merci
Bonjour

Tu as bien utilisé le bouton 2 avant le bouton 1 ?
Commenter la réponse de cs_Robert33
said_dias_01 103 Messages postés dimanche 20 mars 2005Date d'inscription 30 décembre 2017 Dernière intervention - 29 déc. 2013 à 20:19
0
Merci
slt,

Bien sûr que oui
Commenter la réponse de said_dias_01
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 29 déc. 2013 à 21:04
0
Merci
Bonsoir

Désolé j'avais pas bien regardé ton code...

Quand tu cliques sur un bouton la "Form" est "reloadée" donc le textbox que tu avais inséré disparait.

Il faut charger les contrôles dynamiques uniquement dans le Page_load(...)

une solution consiste à stocker les contrôles créés dynamiquement dans un tableau, puis dans le form_load on parcourt ce tableau et on réinjecte les contrôles sur la "Form"

Commenter la réponse de cs_Robert33
said_dias_01 103 Messages postés dimanche 20 mars 2005Date d'inscription 30 décembre 2017 Dernière intervention - 29 déc. 2013 à 21:36
0
Merci
Merci d'abord pour la réponse
C'est une bonne idée de stocker les objets dynamique dans un tableau dans le page_load
Mais pour facilité l'explication j'ai donné un exemple d'un seul Textbox
Pour moi je veux de créer (X nombre) de Textbox selon mon besoin au mode exécution
Exemple : le nombre des Textbox affichés selon le nombre des éléments sélectionnés dans une Listbox
j'ai fait tout ça ,mai comment je peut récupérer les valeurs de ces Zone de text sur cliques sur un bouton sans passer par Page_load
Commenter la réponse de said_dias_01
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 30 déc. 2013 à 09:11
0
Merci
Bonjour

Non, si tu veux utiliser des TextBox, ou autres contrôles, tu dois impérativement passer par le Page_load.

petit exemple en utilisant un cookie de session:
déclaration du tableau
Private myControls As List(Of Control)

Dans le Page_load, création du tableau et stockage dans un cookie de session, ou récupération selon le cas
 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
  ' recuperation du tableau de controles depuis un cookie
  myControls = HttpContext.Current.Session("myControls")
  'pas encore créé ? on le crée
  If (myControls Is Nothing) Then
     myControls = New List(Of Control)
     HttpContext.Current.Session.Add("myControls", myControls)
  Else 'sinon on ajoute les controles au panel
    For Each textbox As TextBox In myControls
       Panel1.Controls.Add(textbox)
    Next textbox
  End If

End Sub


Ensuite tes gestionnaire d'évenements
Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim txt As New TextBox
        txt.ID = "txt" & myControls.Count 'index en fonction du nombre
        txt.Text = "ABC"
        Panel1.Controls.Add(txt)
        myControls.Add(txt)'ajoute dans la collection
    End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim TB As TextBox = DirectCast(Me.Panel1.FindControl("txt1"), TextBox)
        Label1.Text = TB.Text
End Sub


Commenter la réponse de cs_Robert33
said_dias_01 103 Messages postés dimanche 20 mars 2005Date d'inscription 30 décembre 2017 Dernière intervention - 30 déc. 2013 à 16:38
0
Merci
Au premier essai il reste le même bug :La référence d'objet n'est pas définie à une instance d'un objet
Mai après la vérification j'ai trouvé que (myControls.Count) il commance par 0
Quand je mette
Dim TB As TextBox = DirectCast(Me.Panel1.FindControl("txt0"), TextBox) 

il a affiché le cntenu de txt0 dans label1
En fin de compte çamarch bien et le text0 ne disparait pas
Merci infiniment de votre aide
Tu ma donné la 1er pas merci autre fois
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 3 janv. 2014 à 18:01
Bonjour

Merci de marquer la réponse comme acceptée.
Commenter la réponse de said_dias_01

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.