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 avec boutons radio généré à partir d'une requête


Sujet :

ASP.NET

  1. #1
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut Tableau avec boutons radio généré à partir d'une requête
    Bonjour !

    En ce moment je suis sur un problème qui me turlupine un peu...
    J'explique. Mon utlilisateur rentre des données dans un formulaire de recherche. Lorsqu'il clique sur le bouton, il arrive sur une page qui lui présente les résultats de sa recherche.
    Ils sont présentés dans un tableau comme suit :
    1ère colonne : bouton radio permettant de sélectionner la ligne
    2ème colonne : un texte généré à partir des données (du style "X fait telle chose, tel jour à telle heure et à tel endroit")

    Donc, évidemment, ce que je veux c'est que l'utilisateur puisse sélectionner une des lignes grâce au bouton radio, et passer à la page suivante en cliquant sur un bouton.

    Le problème, c'est que je ne sais pas vraiment comment m'y prendre pour le tableau. j'ai essayé en le mettant sous forme de label dont je modifie le texte dans le codebehind en bouclant sur les résultats de ma requête (à l'ancienne ). A l'affichage c'est parfait, mais je n'ai pas la moindre idée de comment je peux bien récupérer la valeur du bouton radio sélectionné.
    J'ai essayé en faisant quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string numero = ((RadioButton)this.FindControl("my_radio_button")).Text;
    Mais bien entendu, ça ne fontionne pas, il ne trouve pas le contrôle.

    J'ai aussi cherché du côté des Datagrid, mais je suis rentré bredouille de mes recherche, rien trouvé de pertinent sur ce qui m'intéressait.

    Si quelqu'un a une idée...

    Merci

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 42
    Points
    42
    Par défaut
    Je te conseil l'utilisation d'un <asp:Table> de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <asp:Table ID="Table1" runat="server">
      <asp:TableHeaderRow>
        <asp:TableHeaderCell>
          Nom
        </asp:TableHeaderCell>
        <asp:TableHeaderCell>
          Selection
        </asp:TableHeaderCell>
      </asp:TableHeaderRow>
    </asp:Table>
    Et dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    foreach (string s in result)
    {
        TableRow row = new TableRow();
        TableCell nom = new TableCell();
        nom.Controls.Add(new Label() { Text = s });
        TableCell select = new TableCell();
        select.Controls.Add(new RadioButton() { GroupName = "myGroup", Text = "Selection", ID = s });
        row.Cells.Add(nom);
        row.Cells.Add(select);
        Table1.Rows.Add(row);
    }
    Ou result est une collection de string. Tu pourra ainsi utiliser ton FindControl avec le nom qui est affiché. En fait j'ai fait ca pour me simplifier la vie tu peux également donner l'identifiant que tu veux en modifiant le "ID = s".

  3. #3
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Ah super, merci ! Ca a l'air pratique ce contrôle, je ne connaissais pas.

  4. #4
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Ok, ça marche à l'affichage, mais par contre... comment fait-on pour récupérer l'id du radiobutton sélectionné ? Ils ont tous le même groupname, mais la méthode findcontrol ne prend en paramètre qu'un ID.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 42
    Points
    42
    Par défaut
    Le GroupName sert à faire en sorte que l'on ne puisse cocher qu'une RadioBox à la fois. Ca sert à constituer un groupe de RadioButton dont un seul ne peut être selectionné en d'autre termes. C'est l'ID qui est unique et qui permet de trouver le control que tu recherche par la méthode FindControl(...).

  6. #6
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    J'avais bien compris, mais je veux justement savoir quel bouton radio mon utilisateur a sélectionné parmi ceux appartenant au même groupe (ici sur ma page je n'en ai qu'un seulde toute façon) pour en récupérer l'ID (qui réfère à un champ de ma base de données).
    Mais vu que je ne connais pas l'ID à l'avance, je ne peux pas utiliser FindControl() en fait.

    J'ai la solution de boucler sur tous les contrôles de la page, mais je suppose qu'il y a un moyen plus simple de faire ça ?

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 42
    Points
    42
    Par défaut
    Heu.. plus simple je n'en vois pas. Moins bourrin, on peut imaginer sauver une référence sur chaque RadioButton que tu crée dans une liste propre à ta page pour ensuite n'avoir a parcourir que cette liste. C'est mieux je pense. Surtout que les RadioButton créés ne seront pas directement dans la page mais dans le <asp:Table>. Donc tu aurais à parcourir chaque ligne et dans chaque ligne, chaque cellule et dans chaque cellule chaque controle; bref un "triple foreach imbriqué". C'est sur le nom claque!

  8. #8
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Bon, soit, je ferai ça alors

    merci

  9. #9
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Bon, pas si résolu que ça en fait.
    J'initialise mon tableau via une requête SQL à l'intérieur de mon Page_Load, mais à l'intérieur du test if(!IsPostBack). Il s'affiche bien quand la page apparaît pour la première fois, mais si un postback est effectué, il disparaît (la table est vide). Ca me semble assez étrange...
    Et je n'arrive pas à garder les références sur mes Radiobutton.

    J'ai une propriété de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public ArrayList RadioButton_List {
      get{
        return (ArrayList)Session["radiobutton_list"];
      }
      set
      {
        Session["radiobutton_list"] = value;
      }
    }
    J'insère mes boutons radio comme ça (à l'intérieur de ma boucle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TableCell select = new TableCell();
    RadioButton radio = new RadioButton();
    radio.GroupName = "num";
    radio.ID = Convert.ToString(dr["num"]); 
    select.Controls.Add(radio);
    RadioButton_List.Add(radio);
    Le problème, c'est que même quand il y en a un qui est coché, sa propriété "checked" reste à false.

    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
     
    protected void btn_choisir_Click(object sender, EventArgs e)
    {
      string id="";
     
      foreach (RadioButton r in RadioButton_List) {
        if (r.Checked) {
          id = r.ID;
          return;
        }
      }
     
      if (id == "") 
        Tools.MsgBox("Vous devez sélectionner une ligne !");
      else 
        mon_label.Text = id;
    }
    Ma box javascript s'affiche à chaque fois, qu'une ligne soit sélectionnée ou non

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 42
    Points
    42
    Par défaut
    Bien le bonjour!
    Alors, c'est très bizarre parce que ca marche chez moi en passant comme tu l'a fait la liste de RadioButton en session (sauf que j'ai utilisé une List<RadioButton> mais je ne vois pas en quoi ca peut changer le résultat final). Peut être as tu encapsulé la création du tableau dans un if (!IsPostback) { ... } auquel cas c'est normal que les checkbox n'aient pas changé d'état. A part ça le code a (malheureusement pour toi) l'air d'être fonctionnel. Essaye de mettre des points d'arret dans le Page_Load de ta page et regarde ce qu'il se passe au postback. Bonne chance pour ton bug!

  11. #11
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par seth78 Voir le message
    Peut être as tu encapsulé la création du tableau dans un if (!IsPostback) { ... } auquel cas c'est normal que les checkbox n'aient pas changé d'état.
    C'est bien ce que j'ai fait, mais le problème est que le tableau est initialisé à partir d'une requête paramétrée par des valeurs que l'utilisateur a saisies à la page précédente. Or, lors du Postback, la référence à la page précédente disparaît (PreviousPage = null). Donc si je n'initialise pas mon tableau dans un bloc if (!IsPostBack), ça ne fonctionnera pas.

  12. #12
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    Pourquoi ne pas utiliser un RadioButtonList ?
    Un exemple ici : http://rtipton.wordpress.com/2006/11...rol-in-aspnet/

  13. #13
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Merci, ça ne correspond pas vraiment à ce que je veux en termes d'affichage, mais j'ai quand même fait un essai... Et je me retrouve avec une erreur étrange, et qui ne provient même pas du RadioButtonList

    En gros, je déclare une variable "prev", du type de la page précédente, dans l'optique de pouvoir accéder à des méthodes pour récupérer les valeurs de ses champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Pages_chercher prev;
    if (PreviousPage != null) {
      prev = (Pages_chercher)PreviousPage;
    }
    else {
      Response.Redirect("~/erreurs/NoAccess.html");
    }
    Ce qui fonctionnait à merveille. Et maintenant, alors que je n'ai même pas touché à ça, il me sort une erreur :
    Erreur 1 Le type ou le nom d'espace de noms 'Pages_chercher' est introuvable (une directive using ou une référence d'assembly est-elle manquante*?)
    J'ai bien vérifié, le nom de la classe est correct.

  14. #14
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    Pour le RadioButtonList, tu peux lui appliquer une classe CSS pour modifier son apparence. Tu n'arriveras cependant pas forcément au rendu que tu vises (je ne sais pas ce que tu cherches à faire...).

    Pour ton erreur, vérifie que ta classe Pages_chercher est bien déclarée en public. Vérifie également qu'elle ne comporte pas d'erreur. Pour cela je te conseil de virer temporairement les référence à cette page dans ta 2e page et d'essayer de build.

  15. #15
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    vérifie que ta classe Pages_chercher est bien déclarée en public.
    C'est fait.

    Vérifie également qu'elle ne comporte pas d'erreur.
    C'est fait.

    Pour cela je te conseil de virer temporairement les référence à cette page dans ta 2e page et d'essayer de build.
    C'est fait.

    Mon site se génère bien quand je vire les références à cette classe, mais dès que je les réintroduis, l'erreur réapparaît (relancer VS ne fonctionne pas non plus ).

  16. #16
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    Les deux pages sont dans le même projet ?
    Tu déclares des names spaces ?

  17. #17
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Oui, mes deux pages font bien partie du même projet, et mieux, elles sont dans le même dossier (de même que leurs fichiers .cs bien entendu). Et non je n'utilise pas de namespace.

  18. #18
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    Alors je ne vois pas, désolé...

  19. #19
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Merci quand même.

    Ce que j'ai du mal à comprendre, c'est que la seule chose que j'ai changé, c'est que j'ai remplacé ma aspTable par une RadioButtonList, rien d'autre... J'ai changé une ligne dans le .aspx et quelques lignes d'une méthode dans mon .cs, c'est tout.

  20. #20
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 628
    Points
    628
    Par défaut
    Ah, ça remarche. j'ai simplement... enlevé les commentaires que j'avais mis. Je n'ai pas la moindre idée de pourquoi ça posait des problèmes, mais bon...

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

Discussions similaires

  1. [WD10] Tableau avec Bouton Radios et Combo
    Par karim.net7 dans le forum WinDev
    Réponses: 2
    Dernier message: 09/11/2010, 17h26
  2. Ouverture d'un état généré à partir d'une requéte à paramètre
    Par Minutemaid dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/02/2010, 09h20
  3. Tableau de sélection avec boutons radios
    Par Illuminati dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2008, 20h11
  4. [JpGraph] Graph généré à partir d'une requête Sql
    Par cyberps2 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/06/2008, 13h52
  5. peut on rafraichir une page avec bouton radio?
    Par zorba49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/06/2006, 12h33

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