Cbo et SelectedValue

Résolu
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
-
Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007
-
Bonjour,

Contexte : J'affiche une liste de client (ListBox) à partir d'un DataSet et je mémorise la primary Key de mes records "client" grâce à la propriété ValueMembre. Grâce à cela, lorsque je clique sur un client de la liste, je retourve facilement sont PK et peut donc afficher l'ensemble des info de ce client.
Ayant une base reationnelle, j'ai une relation entre ma table Client et ma table Ville. Cette table Ville est affichée dans une combo. Donc lorsqu'un client est sélectionné, j'aimerai affiché la bonne ville dans la combo. le problème est que je ne peux pas utiliser la propriété FindStringExact car dansle record client je n'ai que la PK Ville (soit un entier).

Voici ce que j'ai fait (mais qui ne me convient pas vraiment) :
Je récupère les données de la table Ville dans un DataSet puis j'assigne ce DataSet à une Combo grâce à la propriété dataSource. Afin de retrouver la primary Key de mes records j'ai affecté la propriété ValueMember. Ensuite, lorsque je sélectionne un client dans la liste, je selectionne tous mes items de la combo ville afin de retrouver mon PK. Cela fonctionne bien mais on voit la combo "travailler" alors qu'il n'y a pas beaucoup de données.

Voici le source

         //-----------------------------------------------------------------------------
         //-----------------------------------------------------------------------------
         //-----------------------------------------------------------------------------
         // initCboVille
        private void initCboVille()
        {
            //initialisation
            Client client = new Client();   //Classe pour les clients
            Erreur erreur = new Erreur();   // Gestion des erreur
            DataSet ds = new DataSet();     // DataSet pour toutes les villes


            //recherche de tous les clientActif
            erreur = client.retAllVille(out ds);
            if (erreur.enErreur)
            {
                MessageBox.Show(erreur.MsgUser + erreur.MsgInfo,  ...);
                return;
            }


            //Affichage de toutes les ville dans la combo
            cboVille.DataSource = ds.Tables[0];
            cboVille.DisplayMember = "VilleCP";
            cboVille.ValueMember = "NumVille";
        }

         //-----------------------------------------------------------------------------         
         //-----------------------------------------------------------------------------         
         //-----------------------------------------------------------------------------
         //
         private void lstClient_SelectedIndexChanged(object sender, EventArgs e)
            {
               ...
            cboVille.SelectedIndex = Utile.posiCbo(cboVille, int.Parse(dataRow["NumVille"].ToString()));
            ...
            }

         //-----------------------------------------------------------------------------         
         //-----------------------------------------------------------------------------         
         //-----------------------------------------------------------------------------
         // recherche de la PK dans la combo
        public static Int32 posiCbo(ComboBox cbo, Int32 PK)
        {
            for (int i=0; i < cbo.Items.Count;  i++)
            {
                cbo.SelectedIndex = i;
                if (int.Parse(cbo.SelectedValue.ToString()) == PK)
                    return i;
            }
            return -1;            
        }

Question :
Y aurait il un moyen de retrouver la valeur de tous les selectedValue des items de la combo sans passer par leur sélection ?

DT

3 réponses

Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007

Aaaaah, on ne peut pas tout avoir

La boucle présente dans posiCbo est simplement déportée pour l'initialisation du Hashtable. En revanche, un seul appel...

-- AOGie --
Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007

Bonjour,


Pourquoi ne pas utiliser un Hashtable associant Numéro de ville et Index de la ComboBox cboVille.

Après lstClient_SelectedIndexChanged, on sélectionne l'index trouvé dans ce Hashtable...

-- AOGie --
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

Pour la solution que tu me proposes, je suis obligé d'initialiser manuellement le hashTable ? Dans mon cas, je DS provient d'un SELECT dans une BD, je n'ai donc pas d'intervention manuelle pour initialiser la combo ...

DT