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 :

Plusieurs TextBox lié à plusieurs objet


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut Plusieurs TextBox lié à plusieurs objet
    Bonjour,
    Je suis habituellement développeur Java/Struts et je découvre .net 2.0 C# avec visual studio 2005.

    J'ai une liste d'articles, pour chacun de ces articles, je voudrais présenter une Textbox qui permette de saisir la quantité de cet article à commander.
    Pour le moment j'y suis arrivé comme ceci :
    Dans le Page_Load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach (syaka.Article article in this.type.Articles)
            {
                TextBox t = new TextBox();
                t.ID = "quantite[" + article.Id + "]";
                t.Columns = 2;
                t.Visible = true;
                t.Enabled = true;
                t.Text = "0";
                StaticReferences.debug("try to add "+article+" = "+t);
                quantites.Add(article, t);
                Form.Controls.Add(t);
            }
    Et au click du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(syaka.Article article in this.type.Articles)
            {// Débug dans un fichier de log pour voir ce qui est passé
                StaticReferences.debug("quantite d'article "+article.Id+" = "+this.quantites[article].Text);
            }
    Je ne sais même pas si c'est une bonne solution mais voilà ce qui m'embête dans cette solution c'est comment en plus d'afficher les TextBoxs, je vais pouvoir ajouter de l'HTML dans mon formulaire et faire en sorte de bien placer les TextBoxs ?
    Pour chacun des articles je devrais normalement créer un <tr> et afficher des informations contenue dans l'objet syakaArticle.

    J'ai bien penser à la place de Form.Controls.Add essayer de l'écrire moi même du côté ASP dans un foreach mais dans ce cas, la valeur récupérer reste tjs 0.

    Je me doute que ce genre de problème arrive souvent et je cherche LA solution ASP pour ce genre de problème. N'ayez crainte de me faire tout refaire, je voudrais vraiment connaître la BONNE façon.

    D'avance merci

  2. #2
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    J'oubliais de préciser que quand je fais "quantites.Add(article, t);", c'est pour remplir un dictionnaire où à la clé article je stock mon objet textBox.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    En parcourrant les formus, j'ai essayé cette approche mais je coince sur autre chose :
    Au Page_Load je prépare toujours mon Dictionary<Article,TextBox>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            quantites.Clear();
            foreach (syaka.Article article in this.type.Articles)
            {
                TextBox t = new TextBox();
                t.ID = "quantite[" + article.Id + "]";
                t.Columns = 2;
                t.Visible = true;
                t.Enabled = true;
                t.Text = "0";
                quantites.Add(article, t);
            }
    Et dans le code ASP :
    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
     
                    <%
                    foreach (syaka.Article article in type.Articles)
                    {
                        quantitePh.Controls.Add(quantites[article]);
                        %>
                            <tr>
                                <td>
                                    proprietes
                                </td>
                                <td>
                                    <asp:PlaceHolder ID="quantitePh" runat="server" />
                                </td>
                            </tr>
                        <%
                        quantitePh.Controls.Remove(quantites[article]);
                    }
                    %>
    J'utilise un placeHolder auquel j'ajoute dynamiquement mon objet TextBox mais mon problème est alors que quand j'arrive dans mon action ajouter au panier (au OnClick de mon asp:Button), les valeurs des mes TextBox ne sont pas passée.

    Quelqu'un connait-il le moyen de dire au formulaire qu'il doit prendre en compte mes TextBox sans devoir faire Form.Controls.Add qui lui m'empêche de faire une boucle foreach du côté ASP en me disant que si je veux faire du dynamique je dois tout faire côté c# sans une seule "<%%>".

  4. #4
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    Je suis étonné que personne ne réponde à cette question.
    Si quelqu'un est dans le même cas que moi, voici la solution que j'ai mis en place :
    Du côté ASP :
    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
    23
    24
    25
     
    <form id="serverForm" runat="server">
      <div>
        <table>
        <%
                    foreach (syaka.Article article in type.Articles)
                    {
                        // Je set l'id du TextBox que je vais créer
                        quantite.ID = "quantite[" + article.Id + "]";
                        %>
                            <tr>
                                <td>
                                    proprietes
                                </td>
                                <td>
                                    <asp:TextBox ID="quantite" runat="server" Columns="2" Text="0"/>
                                </td>
                            </tr>
                        <%
                    }
        %>
        </table>
          <asp:Button ID="Ajouter" runat="server" Text="Ajouter au panier" OnClick="AjouterPanier" />
      </div>
    </form>
    Ca ne me parraît pas très propre de définir un ID manuellement comme ça mais ça a le mérite de fonctionner.
    Etant donné que je n'ai qu'un TextBox nommé quantité enregistré dans le formulaire, je suis obligé du côté code-behind de retrouver mes valeurs dans la requête :
    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
    23
    24
    25
    26
    27
    28
     
    protected void AjouterPanier(object sender, EventArgs e)
        {
     
            foreach(syaka.Article article in this.type.Articles)
            {
                int quantite = Int32.Parse(findTextBox("quantite[" + article.Id + "]"));
                if (quantite > 0)
                {
                    panier.Add(article, quantite);
                }
                StaticReferences.debug("quantite d'article "+article.Id+" = "+quantite);
     
            }
            Response.Redirect("Default.aspx");
        }
     
        private string findTextBox(string requestFormId)
        {
            foreach (string k in Request.Form.Keys)
            {
                if (k.EndsWith(requestFormId))
                {
                    return Request.Form[k];
                }
            }
            return null;
        }

  5. #5
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    N'y a-t-il pas moyen dans l'asp de dire je voudrais dessiner le contrôle foo maintenant ici.

    J'ai regarder un peu du côté de Control.RenderControl() mais je n'arrive à rien.

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    utilise un repeater.

Discussions similaires

  1. Intégration de plusieurs cellules vers plusieurs textbox
    Par lea133 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/07/2013, 17h35
  2. Concaténation de plusieurs champs dans un objet
    Par bastoonet dans le forum Débuter
    Réponses: 3
    Dernier message: 27/09/2006, 11h13
  3. [C++.NET]RAZ de plusieurs textbox
    Par lowrider dans le forum MFC
    Réponses: 11
    Dernier message: 06/05/2006, 07h41
  4. Réponses: 2
    Dernier message: 15/03/2006, 18h48
  5. Plusieurs clés dans un objet session
    Par maxos75 dans le forum ASP
    Réponses: 4
    Dernier message: 22/12/2005, 16h14

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