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

C# Discussion :

problème de sélection dans une dropdownlist


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut problème de sélection dans une dropdownlist
    Bonjour,

    Je construis une premiere dropdownlist, je choisis une ligne puis je valide.
    A ce moment là, une autre dropdownlist s'afficher, et un autre bouton pour valider.
    Le problème est quand je sélectionne une ligne dans la deuxième dropdownlist, quelque soit la ligne, dès que je clique dessus la page se recharge et c'est la première ligne qui est sélectionnée.
    J'ai beau cherché d'ou vient le problème.
    Dans les propriété des deux ddl, isautopostback est a true ...
    C'est peut être lié a (page.ispostback) qui manque dans le code ? j'ai un peu de mal avec cette propriété ...
    Merci d'avance.

    Voici le code behind de ma page :
    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
     
    private void Page_Load(object sender, System.EventArgs e)
    		{
    			utilisateur = (TSI.Common.BLL.User)Session["user"];
    			if (!Page.IsPostBack)
    			{	
    				BindSondages();	
    			}
    		}
     
    private void BindSondages()
    		{
                   ddlSondages.RemplirDropDownList(mafonctionSql);
    		}
     
    private void Button1_Click(object sender, System.EventArgs e)
    		{ 
    		   ddlQuestions.Visible=true;
    		   ddlQuestion.RemplirDropDownList(mafonctionSql);
    //c'est la que quand je clique sur une ligne, la page se recharge et c'est la première ligne qui est selectionnée
    		   Button2.Visible=true;
    		}
    private void Button2_Click(object sender, System.EventArgs e)
    		{ //mon traitement}

  2. #2
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    Essaye de mettre tes controles dans ta page aspx, à linterieur d'un UpdatePanel de Ajax toolkit

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Regarde si tu as des autopostback.

    On aura besoin du code aspx pour t'aider d'avantage.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut
    merci à vous deux.

    Redouane :Je n'ai jamais utilisé les UpdatePanel, mais je vais me pencher dessus, s'il n y a pas une solution plus simple, j'espère que c'est pas très compliqué ...

    SergeJack : Les autopostback des deux dropdownlist sont à true.
    Voici les lignes correspondant ceux dropdownlists et aux boutons, extraits de ma page aspx :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <asp:dropdownlist id="ddlSondages" runat="server"  AutoPostBack="True"></asp:dropdownlist>
    <asp:button id="Button1" runat="server" Text="Valider"></asp:button>
    <asp:dropdownlist id="ddlQuestions" runat="server"  AutoPostBack="True" Visible="False">
    <asp:button id="Button2" runat="server" Text="Valider" Visible="False">
    En fait, je dois aussi avoir le même problème avec ma première ddl, mais je ne l'ai pas remarqué parce qu'il y a un seul élément dedans.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Mets ces deux autopostback à false.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut
    c'est fait. Ce que ça me fait maintenant c'est que la page ne se recharge pas automatiquement (logique, puisque j'ai mis les autopostback a false ...), mais après que j'ai validé la ligne sélectionnée dans ma ddl en cliquant sur le bouton Valider, la page se recharge (pour afficher la suite, en fonction de la ligne selectionnée) mais là, je vois que c'est encore la première ligne qui est sélectionnée, et c'est le traitement pour cette valeur là qui est effectué ...
    La seul différence par rapport à tout à l'heure c'est que la page ne se recharge pas tout de suite toute seule, c'est tout.
    C'est déjà bien, merci , mais ça ne résoud pas mon problème ...

  7. #7
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut
    Personne ne peut plus m'aider ?

    Il ne faut pas ajouter un 'if !(page.isPostBack) ... ' quelque part ou bien rajouter un appel de fonction dans justement le !(page.isPostBack) qui est dans page_load ??

    J'ai changé un peu ma page aspx pour faire en sorte que l'utilisateur n'ai pas besoin de cliquer sur valider mais que le traitement se poursuit dès que la ligne selectionnée dans la ddl channge , mais ça ne résoud pas le problème : Même si je sélectionne une autre ligne, le traitement se poursuit comme si c'est la premiere ligne qui a été choisie, et sur la ddl on voit que c'est cette ligne qui est sélectionnée ...

  8. #8
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Sinon, tu peux changer ta méthode pour remplir tes dropdownlist, il faut les remplri dés le début, aprés il faut jouer juste sur la visibilité, quand tu clique sur le bouton c'est le 2eme dropdown qui aura visible = true (il est deja remplit).
    En suite, tu peux quand tu va sélectionner une ligne, remplir un ViewState avec cette valeur, et l'appeler aprés que tu rafraichis ta page, qlq chose comme ça :


    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
    public string DDLValue
        {
            get
            {
                if (ViewState["DDLValue"] != DBNull.Value)
                    return (string)ViewState["DDLValue"];
     
                return String.Empty;
            }
            set { ViewState["DDLValue"] = value; }
        }
     
    protected void button1_Click(object sender, EventArgs e)
        {
            DDLValue = ddlQuestions.SelectedValue;
           // Traitement 
        }
    et dans ta page_load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (!String.IsNullOrEmpty(DDLValue))
                    ddlQuestions.SelectedValue = DDLValue;
    c'est à essayer, j'espère que ça va t'aider, l'idée c'est de garder la valeur de la ligne sélectionnée.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    T'es sûr d'attribuer les bonnes méthodes aux bons bouttons ?

    Vérifie les lignes de code (OnInit ?) où tu fais ces attributions.

  10. #10
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    T'es sûr d'attribuer les bonnes méthodes aux bons bouttons ?

    Vérifie les lignes de code (OnInit ?) où tu fais ces attributions.
    Oui. Je fais appel à une méthode InitialiseCOmponent() dans Init(), qui contient les attributions boutons-codes.

    De toute façon ces liaisons sont bien faites puisqu'en cliquant sur le bouton de la fin, y a un traitement qui s'exécute. Le problème c'est que c'est toujours comme ci j'ai selectionné la première ligne c'est tout.

    Redhouane : Je vais essayer de m'inspirer de ta méthode. Je voulais juste trouver l'erreur dans la mienne. C'est tellement enervant quand j'utilise une méthode, que ça marche pas, et que je ne trouve pas la raison ...

    Merci en tout cas à vous tous.

    Si quelqu'un a une illumination tout à coup et trouve le problème dans mon code, je lui serais reconnaissante

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:dropdownlist id="ddlQuestions" runat="server"  AutoPostBack="True" Visible="False">
    Cette balise n'est pas fermée.

    Peux-tu nous donner tout le code des réponses aux click de bouttons ?

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    reprend ton code de depart et modifie juste AutoPostBack=false pour ta deuxieme ddl pour ne pas avoir de rechargement.

    deuxieme solution execute ton traitement lors du changement d'item dans la seconde ddl

  13. #13
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Je pense que le problème est que la 2° dropdownlist n'est créé que lorsqu'un élément de la première est selectionné.

    Pour éviter cela, il faut soit (comme déjà dit plus haut par Redouane), les créer dès le début et juste changer la visibilité. Mais comme la 2° dropdownlist est remplie spécifiquement suivant le choix de la première, cela ne marchera pas.

    La deuxième façon est tout simplement de jouer avec un booléen, sauvegarder dans le viwstate, la session ou autre.

    Etant à false au départ, il passera à true dès que la 2° dropdownlist sera créée, évitant ainsi qu'elle soit récréée à chaque PostBack.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  14. #14
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut
    Sergejack :
    -Autant pour moi, j'avais mal recopié le code et oublié la balise fermante, mais elle y est bien.
    -J'ai mis tout le code plus haut .

    padej450:
    -J'ai essayé ta première méthode.
    -C'est bien ce que je fais. Je ne comprends peut être pas bien ce que tu veux dire ...

    laedit et Redouane :
    - Comme le dit Laedit, ta méthode ne marhce pas Redouane, pque les champs apparaissant dans le deuxième ddl varient en fonction de celui choisi dans la premiere.
    -Je vais essayer la méthode que tu me propose Laedit.

    Merci beacoup !!:

  15. #15
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    est il possibe pour toi de creer des le depart ta ddl avec visible=false et de la remplir seulement lors de la selection dans la premiere.

    a tester

  16. #16
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Le problème ne change pas, la 2° dropdownlist sera constamment remplie lors de l'autopostback.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  17. #17
    Membre éprouvé Avatar de beren.kei
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Par défaut
    la solution serait peut etre d'utiliser des variables de sessions et d'y conserver les indices de tes 2 dropdownlist... voir de les passer en paramètre de ton constructeur lorsque tu recharge ta page... c'est pas ce qu'il y a de plus propre mais ca peut peut etre fonctionner

  18. #18
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut
    Citation Envoyé par laedit Voir le message
    La deuxième façon est tout simplement de jouer avec un booléen, sauvegarder dans le viwstate, la session ou autre.

    Etant à false au départ, il passera à true dès que la 2° dropdownlist sera créée, évitant ainsi qu'elle soit récréée à chaque PostBack.
    Laedit, j'ai essayé cette méthode mais ça ne marche pas. Voici ce que j'ai fait. C'est bien ce que tu voulais dire?
    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
     
    private void Page_Load(object sender, System.EventArgs e)
    		{
    			utilisateur = (TSI.Common.BLL.User)Session["user"];
    
    			HttpContext.Current.Session["ddlSondages_cree"]= false;
    			HttpContext.Current.Session["ddlQuestions_cree"]= false;
    
    			if (!Page.IsPostBack)
    			{	
    				BindSondages();	
    			}
    		}
     
    private void BindSondages()
    		{
    if (Convert.ToBoolean(HttpContext.Current.Session["ddlSondages_cree"])==false)
    			{
                   ddlSondages.RemplirDropDownList(mafonctionSql);
                   HttpContext.Current.Session["ddlSondages_cree"]=true;
    }
    		}
     
    private void Button1_Click(object sender, System.EventArgs e)
    		{ 
    		   ddlQuestions.Visible=true;
    if (Convert.ToBoolean(HttpContext.Current.Session["ddlQuestions_cree"])==false)
    			{
    		   ddlQuestion.RemplirDropDownList(mafonctionSql);
                       HttpContext.Current.Session["ddlQuestions_cree"]=true;
    }
    //c'est la que quand je clique sur une ligne, la page se recharge et c'est la première ligne qui est selectionnée
    		   Button2.Visible=true;
    		}
    private void Button2_Click(object sender, System.EventArgs e)
    		{ //mon traitement}

  19. #19
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    C'est ce que je voulais dire, mais je pense qu'il ne vaut mieux pas faire de test sur le IsPostBack.
    Car là, tu ne pourra créer tes dropdown que la première fois que tu chargeras la page.

    Sinon, pour avoir la session, un simple this.Session devrait suffire sans devoir passer par le HttpContext.

    Si ça ne marche toujours pas, c'est bizarre, le ControlState devrait sauvegarder les valeurs des contrôles et les restituer lors du PostBack.

    Sinon, fait la sauvegarde toi même, encore une fois avec la session.

    Du coup, tu ne sauvegardera plus les booléens, mais juste la valeur des dropdownlist. Lors du chargement (ou rechargement) de la page, si une valeur est stockée alors on la passe à la DropDownList.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  20. #20
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Par défaut
    Citation Envoyé par laedit Voir le message
    C'est ce que je voulais dire, mais je pense qu'il ne vaut mieux pas faire de test sur le IsPostBack.
    Car là, tu ne pourra créer tes dropdown que la première fois que tu chargeras la page.
    Quand j'enlève le test sur le IsPostBack, la premiere ddl ne se remplit pas.

Discussions similaires

  1. Problème de sélection dans une ListView
    Par Sake_reflex dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 29/10/2012, 13h44
  2. [WD16] Problème de sélection dans une table
    Par mubbes dans le forum WinDev
    Réponses: 1
    Dernier message: 07/03/2012, 14h14
  3. Problème de sélection dans une requete
    Par formidable78 dans le forum IHM
    Réponses: 1
    Dernier message: 09/09/2008, 09h32
  4. [FLASH 8] Problème de sélection dans une liste
    Par jpboogie dans le forum Flash
    Réponses: 3
    Dernier message: 29/09/2006, 14h12
  5. Problème de sélection dans une listbox
    Par cacahuèèète dans le forum Access
    Réponses: 3
    Dernier message: 29/06/2006, 15h03

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