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

C# Discussion :

Récupérer la valeur d'une textBox créé dynamiquement


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut Récupérer la valeur d'une textBox créé dynamiquement
    Bonjour tous,
    J'espère que vous allez bien
    J'ai cherché presque partout à une solution pour mon problème, mais sans résultat utile.
    J'arrive à créer une textebox dynamiquement. et j'essaye de récupérer la valeur saisié, mais toujours ça marche pas ave moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TextBox TB = (TextBox)this.Panel1.FindControl("TextBox_1");
    Label1.Text=TB.Text;
    Voila l'erreur qui s'affiche.
    Object reference not set to an instance of an object.
    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Vérifie que lors de la création tu as bien mis un ID.
    Car la visiblement ton "TB" est null, car il ne trouve pas dans le Panel1 le contrôle "TexteBox_1"

    Pourrais tu mettre ton code création dynamique de textbox, car la c'est pas simple de pouvoir t'aider.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    merci pour ta réponse.
    oui j'ai défini un id. et voila mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     protected void Button3_Click(object sender, EventArgs e)
        {               
                        TextBox tb=new TextBox();
     
                       tb.ID = "TextBoxRow_" + i;
     
     Panel1.Controls.Add(tb);
    }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Lors de la déclaration tu mets un ID="TextBoxRow_1"+i alors que dans le findcontrol tu mets "TextBox_1"

    Modifie ta déclaration en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected void Button3_Click(object sender, EventArgs e)
        {               
                        TextBox tb=new TextBox();
     
                       tb.ID = "TextBox_" + i;
     
     Panel1.Controls.Add(tb);
    }
    Et ca devrait fonctionner...

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    malheureusement, c'est pas ça le problème.

    voila le code tout entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    protected void Button3_Click(object sender, EventArgs e)
        {               
                        TextBox tb=new TextBox();
     
                       tb.ID = "TextBox_1";
     
     Panel1.Controls.Add(tb);
    }
    protected void Button2_Click(object sender, EventArgs e)
        {
    TextBox TB = (TextBox)this.Panel1.FindControl("TextBox_1");
    Label1.Text=TB.Text;
    }
    le meme erreur s'affiche. Peut-il y avoir une relation avec postBack?

  6. #6
    Membre régulier Avatar de Klivor
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 143
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par MEHDIJS Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    protected void Button3_Click(object sender, EventArgs e)
        {               
                        TextBox tb=new TextBox();
     
                       tb.ID = "TextBox_1";
     
     Panel1.Controls.Add(tb);
    }
    protected void Button2_Click(object sender, EventArgs e)
        {
    TextBox TB = (TextBox)this.Panel1.FindControl("TextBox_1");
    Label1.Text=TB.Text;
    }
    Essaye avec un truc de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach (TextBox  tb in tonpanel.controls)
                {
                    if (tb.Name =="TextBox_1")
                    {
                        Label1.Text=TB.Text;
                        break;
                    }
                }
    et si tu as autre chose que des textbox dans ton pannel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     foreach (Control   ctrl in tonpanel.controls)
                {
                    if (ctrl is TextBox )
                    {
                        if (ctrl.Name == "TextBox_1")
                        {
                            Label1.Text = TB.Text;
                            break;
                        }
                    }
     
                }
    A quel moment tu créé tes textbox ?
    En espérant t'aider,
    cdt Klivor

  7. #7
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Si on est en WinForms :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    protected void Button3_Click(object sender, EventArgs e)
    { 
      TextBox tb=new TextBox();
      // remplacer tb.ID = "TextBox_1" par
      tb.Name = "TextBox_1"
      Panel1.Controls.Add(tb);
    }

  8. #8
    Invité
    Invité(e)
    Par défaut
    Tu as vérifié ce qui est NULL, si c'est le Panel1, Label1, ou TB. Car je commence a avoir un doute sur le faite que ce soit TB

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 229
    Points : 305
    Points
    305
    Par défaut
    De ce que j'ai vu, t'es en train de faire une application web et non pas win ?

    • Pour le win, nous pouvons utiliser cette méthode sans aucun soucis.
    • Pour le web, le problème se pose !!!


    T'es en train d'ajour dynamiquement un TextBox et par la suite, tu clique sur un bouton (tu fais un postback) pour récupérer sa valeur. Le débugger ne peut pas savoir qu'il y a un textbox a été créé dynamiquement (voir cycle de vie d'une apge asp.net)

    Pour résoudre ta problème, deux solutions :
    1. créer le TextBox dans le code asp.net directement (tu peux le cacher/afficher en utilisant la propriété visible)
    2. enregistrer la valeur de ton TextBox dans une variable ViewState et par la suite la récupérer (Par contre tu seras obliger à chaque chargement de la page de recréer le textbox)

  10. #10
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Salut

    Comme le dit très bien Aguetat, si tu fais de l'asp.net ta solution ne peut pas fonctionner.
    En effet lors d'un postback, la page est "recréée" dans sa totalité. Ton controle ajouté dynamiquement n'est pas "connu", ne sera pas créé de nouveau et tu ne pourra pas récupérer la valeur.

    Deux solutions :
    - créer ton contrôle avant et jouer sur la propriété visible.
    - utiliser une variable que tu peux stocker en session/viewstate/... et dans le PageInit de ta page, si variable présente alors tu crées ton contrôle. Il sera alors "connu" par le process et tu pourras récupérer la valeur.

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    bonjour,
    je vous remercie pour vos réponses, voila j'arrive à résoudre le probléme .ci-dessous le code tout entièr:
    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
    17
    18
    19
    20
    21
    22
    static List<TextBox> tbList = new List<TextBox>();
     
    protected void Page_Load(object sender, EventArgs e)
        {
            foreach (Control ctrl in tbList)
            {
                this.Panel1.Controls.Add(ctrl);
            }
    }protected void Button3_Click(object sender, EventArgs e)
        {              
                         TextBox tb=new TextBox();
     
                       tb.ID = "TextBox_1";
     
     Panel1.Controls.Add(tb);
    }
    protected void Button2_Click(object sender, EventArgs e)
        {
    TextBox TB = (TextBox)this.Panel1.FindControl("TextBox_1");
    Label1.Text=TB.Text;
    tbList.Clear();
    }

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    j'ai essayé le méme code mais tjrs j'ai la méme erreur ???? Svp aidez-moi ? j'e ai vraiment besoin!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Récupérer la valeur d'une textbox créée dynamiquement
    Par chicagorange dans le forum Développement Windows
    Réponses: 1
    Dernier message: 15/09/2014, 19h41
  2. Récupérer la valeur d'une textBox générée dynamiquement
    Par Baptiste_87 dans le forum Débuter
    Réponses: 1
    Dernier message: 12/07/2009, 23h21
  3. Réponses: 8
    Dernier message: 17/06/2009, 16h40
  4. récupérer des valeur dans une textbox..
    Par mohe27 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 15/12/2007, 19h37
  5. récupérer la valeur d'une liste déroulante dynamique
    Par grinder59 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 23/01/2006, 17h51

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