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 :

[asp.net] [C#] Création de champs dynamique -> récupérer valeur ?


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut [asp.net] [C#] Création de champs dynamique -> récupérer valeur ?
    Bonjour,

    Sur un formulaire, je génère des champs dynamiquement (en fonction du nombre de résultats ramenés par une requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (i < monMysql.NbRows)
    {
    	Response.Write("<input type=\"text\" id=\"txt_\"" + i + "\" runat=\"server\" value=\"...\" />");
    	i++;
    }
    Le champ créé aura pour ID ("txt_" + i) :
    txt_0
    txt_1
    txt_2
    ...


    J'aimerai savoir comment récupérer la valeur d'un champ dont l'ID est composé de 2 variables :
    var1 : "txt_"
    var2 : i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (i < nblignes)
    {
           ... =  "txt_" + i + .value; // Problème pour récupérer...
           i++;
    }



    Merci.

  2. #2
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    request.form["txt_1"] ou request.querystring["txt_1"]
    request.form["txt_2"] ou request.querystring["txt_2"]
    request.form["txt_3"] ou request.querystring["txt_3"]
    ....

    par exemple ?

  3. #3
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Bonjour,

    Tu peux utiliser aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.FindControl("ID_de_ton_control");
    Par contre, assures toi que ton controle est bien créé avant de le récupérer. Tout contrôle ajouté dynamiquement à ta page n'est plus présent sur un retour "PostBack". Il faut le recréer ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    J'ai essayé vos 2 méthodes...
    Mais elles ne me ramène rien...

    Je m'y suis surement mal pris, je vous met le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void CommandBtn_Click(object sender, EventArgs e)
    {
    	int i = 0;
    	message.Text = "";
     
    	while (i < nblignes)
    	{
    		message.Text += "<br> - " + Request.Form["txt_"+i]; // idem avec : Request.QueryString["txt_" + i];
    		i++;
    	}
    }
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void CommandBtn_Click(object sender, EventArgs e)
    {
    	int i = 0;
    	message.Text = "";
     
    	while (i < nblignes)
    	{
    		message.Text += "<br> - " + Page.FindControl("txt_"+i);
    		i++;
    	}
    }
    Faut-il rajouter quelque chose pour récupérer la valeur (.text, .value, ...) ???

  5. #5
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Quand tu ajoutes des contrôles dynamiquement, utilise plutôt Page.Controls.Add.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int i = 0; i < 10; i++)
    {
        HtmlGenericControl element = new HtmlGenericControl("div");
        element.InnerText = "Element" + i;
        element.ID = "element" + i;
        Controls.Add(element);
    }

  6. #6
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    De plus, si tu souhaites ajouter dynamiquement des controles de type Input, ajoute les directement à ton formulaire. Sinon leur valeur ne sera pas récupérable au retour de ta page.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (int i = 0; i < 10; i++)
    {
        HtmlGenericControl element = new HtmlGenericControl("div");
        element.InnerText = "Element" + i;
        element.ID = "element" + i;
        Controls.Add(element);
    }
    m'ajoute du texte (pas des textbox).

    J'ai essayé de récupérer la valeur (code des posts précédents) mais ça ne marche toujours pas.

    Pourrais-tu mettre un exemple qui génère 2-3 textbox + une procédure qui récupère les valeurs de ces textbox STP

  8. #8
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Voici donc un exemple :

    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
    protected void Page_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 3; i++)
        {
            HtmlInputText element = new HtmlInputText("div");
            element.ID = "element" + i;
            form1.Controls.Add(element);
        }
    }
     
    protected void btnSubmit(object sender, EventArgs e)
    {
        List<Control> controles = new List<Control>();
        for (int i = 0; i < 3; i++)
        {
            controles.Add(FindControl("element" + i));
        }
    }
    La fonction btnSubmit est appelée lorsque l'utilisateur clique sur un bouton que j'ai ajouté dans le formulaire.
    Regarde les valeurs des 3 contrôles récupérés dans la fonction btnSubmit, et tu verras qu'ils contiennent bien les valeurs que tu as rentré auparavant dans l'interface.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Je n'arrive toujours pas à récupérer la valeur.
    Il me ramène :
    System.Web.UI.HtmlControls.HtmlInputText
    Comment puis-je récupérer la valeur sous forme de chaîne ???

  10. #10
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    C'est que ça marche bien alors

    Pour récupérer la valeur du contrôle, il suffit juste de le caster en HtmlGenericControl et d'appeler sa propriété Value. Petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string valeur = (controles[0] as HtmlInputControl).Value;

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut


    Ça fonctionne parfaitement....




    Autre petite question :

    Comment faire pour placer l'élément au bon endroit dans le tableau (créé en même temps) ???

    Les textbox se placent en dessous du tableau...

Discussions similaires

  1. [ASP.NET MVC] Création des règles de validation
    Par Leelith dans le forum ASP.NET
    Réponses: 8
    Dernier message: 29/09/2009, 18h49
  2. [asp.net.c#] Envoyer une Table dynamique par mail
    Par steuve dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/04/2009, 13h57
  3. [ASP.NET 2.0] TemplateField ajout dynamique
    Par fix105 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/10/2008, 16h55
  4. [C# / ASP.NET] Comment creer une listbox dynamique
    Par arioule dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/12/2006, 22h03
  5. Création de champ dynamique dans un formulaire
    Par alex75 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/04/2006, 16h00

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