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 :

Rafraichir une ListBox


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 55
    Par défaut Rafraichir une ListBox
    Bonjour,

    Je construis actuellement une page avec plusieurs ListBox. Il y en a 3 pour être précis. Quand je séléctionne un élément dans le 1er, j'ai fais une fonction qui mets à jour un label, et mets à jour les deux autres ListBox.
    Le label se met bien à jour, mais mes ListBox se mettent elles à jours uniquement si j'ajoute un élément dans celle-ci et pas si j'en supprime un.
    J'ai vérifié en debug, à la fin de la fonction de mon event il ne reste bien dans les items de ma ListBox que les éléments que je veux afficher. Pourtant au rendu graphique, j'ai toujours les éléments que j'ai supprimé.

    Que dois je faire?

    Merci

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Tu fais ça comment? Via du javascript? Un PostBack?

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Tu supprime juste un élement , tous court?

    je pense plutôt qu'il faut que tu la rebind.

  4. #4
    Membre averti
    Inscrit en
    Février 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 55
    Par défaut
    Actuellement je fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    lbxGroupe.Items.Clear();
    lbxGroupe.Items.AddRange(liste_roles);
    foreach (ListItem lstGr in liste_role_user)
    {
          lbxGroupe.Items.Remove(lstGr.Text);
    }
    Cette action est effectuée dans un event que je lance quand une autre ListBox fait un autopostback. Le reste des controles se rafraichissent bien et dans mes items les suppressions sont bien effectuée mais dans le rendu graphique, j'ai rien.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    La comme ca je séche un peu. Peut être faudrait t'il plus de code.

    j'ai testé rapidement ceci sans probleme:


    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
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                for( int i = 0; i <6 ; i++)
                {
                ListItem item = new ListItem("toto"+i, "1"+i);
                ListItem item2 = new ListItem("titi" + i, "1" + i);
                dd.Items.Add(item);
                DropDownList1.Items.Add(item2);
                }
            }
        }
     
     
        protected void dd_SelectedIndexChanged(object sender, EventArgs e)
        {
    //J'ai essayé de faire aussi ressemblant que ta methode mais le clear et le
    //add ne servent a rien le remove seul suffit si tes donnée sont les mêmes
    //que en entrée.
            DropDownList1.Items.Clear();
            for (int i = 0; i < 6; i++)
            {
                ListItem item2 = new ListItem("titi" + i, "1" + i);
                DropDownList1.Items.Add(item2);
            }
            ListItem item3 = new ListItem("titi" + 3, "1" + 3);
            DropDownList1.Items.Remove(item3);
        }
    Dans le PageLoad comment alimente tu ta DropDoown?

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Tu fais pas un DataBind de tes listes dans le OnLoad au moins?

  7. #7
    Membre averti
    Inscrit en
    Février 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 55
    Par défaut
    Voici le code de mes fonctions le clear et le add servent à être sur que j'ai les dernières données dans mon vecteur sachant que mes données ne proviennent pas d'une base de données.

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    protected void Page_Load(object sender, EventArgs e)
        {
     
            //Ajout des utilisateurs à la listBox
            string[] tab_str_user = gest_users.getAllUsersName();
            ListItem[] liste_utilisateur = new ListItem[tab_str_user.Length];
            liste_utilisateur.Initialize();
     
     
            for (int i = 0; i < tab_str_user.Length; i++)
            {            
                liste_utilisateur[i] = new ListItem(tab_str_user[i],tab_str_user[i]);
     
            }
            lbxUser.Items.Clear();
            lbxUser.Items.AddRange(liste_utilisateur);
     
            //Ajout des groupes à la listeBox
            string[] tab_str_roles = gest_users.getAllRoles();
            ListItem[] liste_roles = new ListItem[tab_str_roles.Length];
            liste_roles.Initialize();
     
            for (int i = 0; i < tab_str_roles.Length; i++)
            {
                liste_roles[i] = new ListItem(tab_str_roles[i],tab_str_roles[i]);
            }
            lbxGroupe.Items.Clear();
            lbxGroupe.Items.AddRange(liste_roles);
     
     
     
        }
     
        protected void lbxUser_SelectedIndexChanged(object sender, EventArgs e)
        {
            lblUserName.Text = lbxUser.SelectedValue;
     
            string[] tab_str_user_role = gest_users.getAllUserRole(lbxUser.SelectedValue.ToString());
            ListItem[] liste_role_user = new ListItem[tab_str_user_role.Length];
            liste_role_user.Initialize();
     
            for (int i = 0; i < tab_str_user_role.Length; i++)
            {
                liste_role_user[i] = new ListItem(tab_str_user_role[i],tab_str_user_role[i]);
            }
     
            lbxGroupeUtilisateur.Items.Clear();
            lbxGroupeUtilisateur.Items.AddRange(liste_role_user);
     
            //mises à jour de la liste des groupes pouvant encore être ajouté
            lbxGroupe.Items.Clear();
            //Ajout des groupes à la listeBox
            string[] tab_str_roles = gest_users.getAllRoles();
            ListItem[] liste_roles = new ListItem[tab_str_roles.Length];
            liste_roles.Initialize();
     
            for (int i = 0; i < tab_str_roles.Length; i++)
            {
                liste_roles[i] = new ListItem(tab_str_roles[i], tab_str_roles[i]);
            }
            lbxGroupe.Items.Clear();
            lbxGroupe.Items.AddRange(liste_roles);
     
            foreach (ListItem lstGr in liste_role_user)
            {
                lbxGroupe.Items.Remove(lstGr.Text);
            }
     
     
     
        }

  8. #8
    Membre averti
    Inscrit en
    Février 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 55
    Par défaut
    Je rencontre également le même problème avec d'autres fonctions qui font le même genre d'opération. Le problème est plus un problème d'ordre d'affichage graphique que de logique en lui même.

    EDIT :

    JE continue mon débug. Je viens de voir en mode débug que sur certaines ListBox et pas d'autres, le SelectedIndex restait à -1 meme si je choisis un item et qu'il est bien séléctionné sur la page web.

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    tiens j'ai repris ton code grossièrement:
    Je trouvais que tu passer par des étapes un peu superflue. Je suis plus pour le DataSource mais comme tu as commencé comme ca...

    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
        protected void Page_Load(object sender, EventArgs e)
        {
            /*C'est équivalent a ton allimentation*/
            string[] tab_str_user = new string[6];
            string[] tab_str_roles = new string[6];
            for (int i = 0; i < 6; i++)
            {
                tab_str_user[i] = "user" + i;
                tab_str_roles[i] = "role" + i;
     
            }
            lbxUser.Items.Clear();
            foreach (string user in tab_str_user)
            {
                lbxUser.Items.Add(user);
     
            }
            lbxGroupe.Items.Clear();
            foreach (string role in tab_str_roles)
            {
                lbxGroupe.Items.Add(role);
     
            }
     
        }
     
        protected void lbxUser_SelectedIndexChanged(object sender, EventArgs e)
        {
     
            /*En scahnt que quelque millième de seconde avant tu passe dans la page load d'apreés moi tu n'a pas besoin de realimenter ta DropDown
             Mais bon ca depend de tes besoins*/
            string[] tab_str_roles = new string[6];
            for (int i = 0; i < 6; i++)
            {
                tab_str_roles[i] = "role" + i;
     
            }
            lbxGroupe.Items.Clear();
            foreach (string role in tab_str_roles)
            {
                lbxGroupe.Items.Add(role);
     
            }
            lbxGroupe.Items.Remove("role2");
            lbxGroupe.Items.Remove("role5");
        }
    evidment c'est pas exactement ton code mais ca s'approche.
    Pour moi ca marche comme dit dans le code je pense pas que tu ai besoin de réalimenter ta dropDown (je l'ai quand meme fais pour faire comme toi mais bon) étant donné que c'est deja fais dans la pageLoad( et donc fait juste avant l'événement).

    Voila

  10. #10
    Membre averti
    Inscrit en
    Février 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 55
    Par défaut
    Ok merci je regarde ton code, je vais implémenté comme ca voir si ca passe.
    Le fait pour lequel je fesais tout un cirque avec les addRange, c'est parce que chez Microsoft ils disent de provilégier le addRange pour des questions de performances. Mais bon c'est vrai que dans ce cas-ci, je me suis bien compliqué la vie.

  11. #11
    Membre averti
    Inscrit en
    Février 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 55
    Par défaut
    Voila j'ai regardé ton code, et j'ai grandement simplifier en me basant sur le tien et sur les remarques que tu m'avais faites en parlant par exemple du fait que je reload mes données à chaque fois.
    J'ai relu mes bouquins d'asp.net pour vérifier la gestion des events et j'ai retravailler le code sur cette base la.
    Maintenant , je ne charge plus qu'une fois mes données que si c'est un appel non postback de la page. De toutes facon les groupes d'utilisateurs sont pas appelé à changer toutes les 10sec.
    Et je joue directement sur les données en déplacant les éléments et en direct sans faire de reload des données entre chaque event. Ce qui est une manière beaucoup plus propre de travailler. Le fait que je perdais mes SelectedIndex venait aussi de la puisque je fesais un clear dans le pageLoad qui est appelé avant mon event.

    Bref le fait d'avoir relu la théorie m'a permis de me rendre compte de mes erreurs.

    Merci pour votre aide

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

Discussions similaires

  1. [PowerShell] Rafraichir une listbox
    Par julie75 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 30/07/2011, 00h13
  2. [NSIS] Comment rafraichir une listBox ?
    Par maanifiik dans le forum Windows
    Réponses: 7
    Dernier message: 08/04/2010, 18h01
  3. Rafraichir une ListBox
    Par sissi00000 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/07/2008, 17h30
  4. rafraichir une listbox
    Par yedid dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/08/2007, 11h21
  5. Réponses: 6
    Dernier message: 02/06/2006, 11h44

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