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 :

Tableau via la méthode POST


Sujet :

ASP.NET

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Tableau via la méthode POST
    Bonjour,

    Je sollicite de nouveau votre aide concernant un petit problème que je sais résoudre en PHP via les tableaux associatifs mais dont je ne trouve pas la réponse en ASP.Net.

    Je génére un formulaire de saisie de notes à partir de question stocké dans une base de données. Le formulaire de saisie est donc composé d'un ensemble d'objet input dont le nom est de la forme : question[id_question]. Petit extrait pour être peut être plus claire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...<input type="text" name="question[1]" value=""/>...
    ...<input type="text" name="question[2]" value=""/>...
    ...<input type="text" name="question[5]" value=""/>...
    ...<input type="text" name="question[10]" value=""/>...
    Sachant que les identifiants des questions peuvent contenir des "trous", est-ce qu'il existe une solution simple pour parcourir les valeurs dans la pages où j'exploite ces données. Pour l'instant j'utilise un bout de code qui ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach (string clef in Request.Params) {
        if (clef.StartsWith("question") ...
    }
    mais je ne trouve pas ça super pratique pour extraire l'identifiant de la question.

    Merci pour votre aide,

    tiff

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Il faut éviter ce genre de pratique en asp.net.

    Utilise plutôt du binding notament grâce aux controles data de ta toolbox.

    Dans ton cas tu peux utiliser le Real World GridView: Bulk Editing qui te permet d'avoir un gridview avec plusieurs lignes en mode edition.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    J'ai commencé à regarder le composant GridView, mais la présentation se fait sous la forme de tableau. Je cherche à implémenter un formulaire de saisi d'évaluation pour connaitre la satisfaction de clients. La présentation sous la forme de tableau ne me plait pas trop. Je me permet d'expliquer rapidement mon problème, si quelqu'un trouve une solution:
    - J'ai deux tables dans une base de données : 1 table sectionEval et une table question (liens : 1 section = plusieurs question)
    - Voilà ce que cela donne à la saisie :

    1 - Intitulé de la première section
    - 1ere question de la section 1 : RadioList ou TextBox
    - 2 eme question
    ...
    2 - Intitulé de la deuxième section
    - ...

    Si quelqu'un a une piste. Pour l'instant, j'ai crée un accès aux données de type DAO et je créer mon formulaire à la main!

    Tiff

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser un Repeater et définir :
    HeaderTemplate : affichage de l'intitulé de la section
    ItemTemplate / AlternatingItemTemplate : affichage de chaque question et soit d'un RadioList ou d'un TextBox en fonction de la réponse nécessaire.

    Ensuite, il suffit de mettre un Button hors du Repeater pour faire un PostBack et de récupérer dans l'événement toutes les réponses enregistrées par l'utilisateur dans le Repeater.

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Kaidan pour tes pistes, ça me parait super intéressant. Je voudrais pas abusé mais est-ce que tu connaitrais un petit tuto qui démontre comment utiliser les composants que tu sites ?

    Tiff

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Finalement, c'est pas simple la mise en forme conditionnelle dans un Repeater...

    Dans la page ASPX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <asp:Repeater ID="myrepeater" runat="server">
       <ItemTemplate>
          <asp:label ID="lblquestion" runat="server"><%# DataBinder.Eval(Container.DataItem, "Question") %></asp:label>
          <br />
          <asp:TextBox ID="tbanswer" runat="server"></asp:TextBox>
          <asp:RadioButtonList ID="rblanswer" runat="server"></asp:RadioButtonList>
       </ItemTemplate>
       <SeparatorTemplate>
          <hr />
        </SeparatorTemplate>
    </asp:Repeater>
    <asp:Button Text="Envoyer" id="button" runat="server" OnClick="button_Click" />
    <asp:Label id="resultats" runat="server"></asp:Label>
    En code-behind :

    Page_Load initialise pour l'exemple une DataTable avec deux colonnes : la question et les réponses possibles si il y a lieu séparées par des virgules. Lors du DataBind pour chaque ligne de donnée, l'événement ItemDataBound est appellé : c'est lui qui en fonction de la valeur de answers affiche la zone de texte ou la radiobuttonlist. L'appui sur le bouton déclenche button_Click qui va afficher toutes les réponses dans le label resultats.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
        protected void Page_Load(object sender, EventArgs e) {
            if(!Page.IsPostBack) {
                DataTable dt = new DataTable();
                dt.Columns.Add("Question");
                dt.Columns.Add("Answers");
                dt.Rows.Add(new object[] { "Comment on affiche un TextBox dans un repeater ?", "" });
                dt.Rows.Add(new object[] { "Comment on affiche une RadioButtonList dans un repeater ?", "Réponse 1, Réponse 2, Réponse 3" });
                myrepeater.DataSource = dt;
                myrepeater.ItemDataBound += new RepeaterItemEventHandler(myrepeater_ItemDataBound);
                myrepeater.DataBind();
            }
        }
     
        private void myrepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) {
            if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
                DataRowView dr = (DataRowView)e.Item.DataItem;
                string answers = ((string)dr["Answers"]).Trim();
                if(answers == null || answers.Length == 0) {
                    RadioButtonList rbl = (RadioButtonList)e.Item.FindControl("rblanswer");
                    rbl.Visible = false;
                } else {
                    RadioButtonList rbl = (RadioButtonList)e.Item.FindControl("rblanswer");
                    TextBox tb = (TextBox)e.Item.FindControl("tbanswer");
                    tb.Visible = false;
                    string[] sanswers = answers.Split(',');
                    for(int i = 0 ; i < sanswers.Length ; i++) {
                        rbl.Items.Add(new ListItem(sanswers[i].Trim()));
                    }
                }
            }
        }
     
        protected void button_Click(object sender, EventArgs e) {
            for(int i = 0 ; i < myrepeater.Items.Count ; i++) {
                Label question = (Label)myrepeater.Items[i].FindControl("lblquestion");
                RadioButtonList rbl = (RadioButtonList)myrepeater.Items[i].FindControl("rblanswer");
                TextBox tb = (TextBox)myrepeater.Items[i].FindControl("tbanswer");
                resultats.Text += "<br /><b>" + question.Text + "</b></br>Résultat : ";
                resultats.Text += rbl.Visible == true ? rbl.SelectedItem == null ? "" : rbl.SelectedItem.Text : tb.Text;
            }
        }

Discussions similaires

  1. Envoyer un tableau par la méthode POST
    Par bourbita.thameur dans le forum Langage
    Réponses: 6
    Dernier message: 28/04/2009, 11h33
  2. Envoi de données via la méthode POST
    Par mrsoyer dans le forum Langage
    Réponses: 6
    Dernier message: 19/06/2008, 11h56
  3. Réponses: 3
    Dernier message: 29/12/2007, 23h57
  4. upload fichiers via la méthode POST
    Par shiin dans le forum Réseau
    Réponses: 3
    Dernier message: 20/02/2007, 10h54
  5. Réponses: 12
    Dernier message: 22/01/2006, 18h01

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