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

Résolu
said_dias_01 Messages postés 103 Date d'inscription dimanche 20 mars 2005 Statut Membre Dernière intervention 30 décembre 2017 - 29 déc. 2013 à 13:54
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 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 )

6 réponses

said_dias_01 Messages postés 103 Date d'inscription dimanche 20 mars 2005 Statut Membre Dernière intervention 30 décembre 2017 1
29 déc. 2013 à 20:19
slt,

Bien sûr que oui
1
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
29 déc. 2013 à 17:53
Bonjour

Tu as bien utilisé le bouton 2 avant le bouton 1 ?
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
29 déc. 2013 à 21:04
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"

0
said_dias_01 Messages postés 103 Date d'inscription dimanche 20 mars 2005 Statut Membre Dernière intervention 30 décembre 2017 1
29 déc. 2013 à 21:36
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
30 déc. 2013 à 09:11
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


0
said_dias_01 Messages postés 103 Date d'inscription dimanche 20 mars 2005 Statut Membre Dernière intervention 30 décembre 2017 1
30 déc. 2013 à 16:38
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
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
3 janv. 2014 à 18:01
Bonjour

Merci de marquer la réponse comme acceptée.
0
Rejoignez-nous