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 :

[C#][2.0] CheckBoxList Récupérer le dernier élément activé


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 60
    Points : 57
    Points
    57
    Par défaut [C#][2.0] CheckBoxList Récupérer le dernier élément activé
    Bonjour,

    J'utilise des checkboxlist ainsi que des RadioButtonList. J'abonne ces deux listes à leurs évènement SelectedIndexChanged et elles sont toutes deux à AutoPostBack à true.

    Mon souci est de récupérer le dernier élément que l'utilisateur a coché ou décoché.

    Pour les radioButton, ce n'est pas difficile, une seule option peut être sélectionnée à chaque fois, donc la propriété SelectedValue est suffisante...

    Par contre pour les CheckBoxList, SelectedValue me renvoie toujours la valeur cochée avec le plus faible index... Donc pas forcément celle que l'utilisateur a activé...

    J'entrevois plusieurs solutions possibles à ce problème... mais si quelqu'un a déjà été confronté à ceci, et a trouvé une solution (ou si simplement la solution existe déjà en .NET et que je serais passé à côté), cela m'intéresse

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut une méthode
    une façon pas forcément élégante serait de mettre à jour par un javascript un champ caché avec l'attribut runat=server. tu y mémorise la valeur coché dans ta liste. ça se fait bien en javascript

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 60
    Points : 57
    Points
    57
    Par défaut
    Pas bête, j'avais pas pensé à cette solution...

    Néanmoins, si je pouvais éviter de rajouter du js à ma page, je préfèrerais... Ce contrôle sera inclus dans un UpdatePanel Atlas, donc je préfèrerais éviter le js parasite :p

    Merci quand même, je vais me garder ça de côté en dernier recours :p

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Dans l'évènement SelectedIndexChanged récupère dans une variable de session ou une variable statique l'index de l'élément coché à chaque fois. Tu auras toujours l'index de la dernière case cocher dans cette variable.
    Cordialement.

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 60
    Points : 57
    Points
    57
    Par défaut
    hum, je ne suis pas sûr de comprendre ta manip fnganiet, désolé...

    Mon problème est justement que je ne sais pas quel élément a été coché, je ne récupère que celui qui a l'index le plus faible... Ce que je pensais faire était à chaque clic de récupérer tous les items cochés, et de comparer l'ancienne et la nouvelle liste. Je devrais ainsi pouvoir récupérer celui qui n'est pas présent dans l'ancienne liste...

    Est-ce à ça que tu pensais ???

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut autre méthode
    sinon tu peux utiliser une ArrayList en session dans laquelle du mémorise les sélections. Avec la méthodes ArrayList.Contains() et la collection des éléments de la liste, tu dois pouvoir retrouver le nouvel élément coché.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Un exemple vaut mieux que de long discours.
    Je n'ai pas tester ce programme, mais je pense qu'il répond à ta question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Session["lastClick"] = 
                CheckBoxList1.Items.FindByValue(CheckBoxList1.SelectedValue);
    if (Session["lastClick"] != null)
    {
           Label1.Text = "Dernier Coché = " +
               (Session["lastClick"] as ListItem).Text;
    }

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 60
    Points : 57
    Points
    57
    Par défaut
    L'idée est intéressante, mais hélas, SelectedValue renvoie toujours le premier item coché... donc impossible de savoir quel est la checkbox particulière qui a été activée :p

    En tout cas, merci pour vos pistes, je vais travailler dessus, et je suis preneur pour toute autre méthode :p (je pensais en particulier, pourquoi pas à réécrire le selectedIndexChanged... mais bon...)

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 60
    Points : 57
    Points
    57
    Par défaut
    Bon, n'ayant pas trouvé d'autre méthode, je suis passé à la méthode barbare en m'inspirant d'une idée de CyberMaxs :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
            private ArrayList SelectedItems
            {
                get { return (ArrayList)ViewState["SelectedItems"]; }
                set { ViewState["SelectedItems"] = value; }
            }
     
            private ArrayList GetSelectedItems()
            {
                ArrayList newSelectedItems = new ArrayList();
     
                foreach (ListItem li in this.AnswersList.Items)
                {
                    if (li.Selected)
                        newSelectedItems.Add(li.Value);
                }
                return newSelectedItems;
            }
     
            public string CompareListItems()
            {
                ArrayList newSelectedItems = GetSelectedItems();
                string valueChecked;
     
                if (this.SelectedItems == null)
                {
                    SelectedItems = newSelectedItems;
                    return (string)SelectedItems[0];
                }
     
     
                int length = (this.SelectedItems.Count > newSelectedItems.Count) ? this.SelectedItems.Count : newSelectedItems.Count;
     
                for (int i = 0; i < length; i++)
                {
                    if (i < newSelectedItems.Count)
                        if (!(this.SelectedItems.Contains(newSelectedItems[i])))
                        {
                            valueChecked = (string)newSelectedItems[i];
                            this.SelectedItems = newSelectedItems;
                            return valueChecked;
                        }
     
                    if (i < this.SelectedItems.Count)
                        if (!(newSelectedItems.Contains(this.SelectedItems[i])))
                        {
                            valueChecked = (string)this.SelectedItems[i];
                            this.SelectedItems = newSelectedItems;
                            return valueChecked;
                        }
                }
     
                return string.Empty;
            }
    Si quelqu'un a une meilleure idée, je suis preneur Merci à vous deux pour vos idées :p

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par Raduris
    Bon, n'ayant pas trouvé d'autre méthode, je suis passé à la méthode barbare en m'inspirant d'une idée de CyberMaxs

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 60
    Points : 57
    Points
    57
    Par défaut
    Attention hein !!

    J'ai pas dit que ta méthode était barbare, mais mon implémentation


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2009, 13h58
  2. Réponses: 7
    Dernier message: 13/11/2009, 13h22
  3. [RegEx] Récupérer le dernier élément entre slashes
    Par pp_le_moko dans le forum Langage
    Réponses: 8
    Dernier message: 09/11/2009, 13h01
  4. Récupérer l'avant dernier élément d'une table
    Par markoBasa dans le forum SQL
    Réponses: 1
    Dernier message: 22/08/2008, 09h37
  5. Comment récupérer l'index du dernier élément inséré ?
    Par Didier100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 22h41

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