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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 38
    Points
    38
    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 expérimenté 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
    Points : 1 352
    Points
    1 352
    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
    Points : 443
    Points
    443
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 38
    Points
    38
    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
    Points : 443
    Points
    443
    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
    Points : 443
    Points
    443
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 38
    Points
    38
    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
    Points : 443
    Points
    443
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 38
    Points
    38
    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
    Points : 443
    Points
    443
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 38
    Points
    38
    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