Comment utiliser le DisplayMember et ValueNumber C#

Résolu/Fermé
moiii123 Messages postés 19 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 avril 2016 - 24 juin 2015 à 10:33
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 24 juin 2015 à 18:01
Bonjour,

Je me permets de vous exposer mon souci.

Je suis novice en programmation (novice est le mot juste).
Je suis sur Visual Studio 2013, j'ai créé un projet avec une base de données access.
J'ai réussi à faire la connexion, mes premières requêtes fonctionnent aussi.

J'ai créé un formulaire avec un combobox qui s'alimente avec ma base de données et j'aimerais qu'il m'affiche le nom mais qu'il renvoie l'id.
En me renseignant j'ai trouvé le DisplayMember et ValueNumber.
Le souci : je ne sais pas l'utiliser.

Pouvez-vous m'aidez svp ?


moiii123
A voir également:

4 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
24 juin 2015 à 11:10
Bonjour, comme il y a 50 façons d'alimenter un combobox depuis une base de données, la réponse va dépendre de ce que tu as fait.

Merci donc de poster ton code en utilisant la coloration syntaxique.
0
moiii123 Messages postés 19 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 avril 2016
24 juin 2015 à 11:47
Re-bonjour,

Voici ce que j'ai fais pour le moment, mon combobox s'alimente bien.
Juste je ne sais pas comment gérer le DisplayMember et ValueNumber.


private void Form3_Load(object sender, EventArgs e)           
        {
            comboBox1.SelectedItem = 0;
            OleDbConnection CONNEXION_BASE = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + CHEMIN_BASE_MDB);
            using (CONNEXION_BASE)
            {
                CONNEXION_BASE.Open();
                using (OleDbCommand COMMANDE = new OleDbCommand())
                {
                    COMMANDE.CommandText = "SELECT id_user, nom_user FROM [USER]";
                    COMMANDE.Connection = CONNEXION_BASE;

                        OleDbDataReader reader = COMMANDE.ExecuteReader();
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {

                                string ligne = reader["nom_user"].ToString();
                             
                                //   comboBox1.Text += ligne;
                                comboBox1.Items.Add(reader["nom_user"].ToString());
                                
                            }
                        }                                     
                }
                CONNEXION_BASE.Close();
            }



Merci d'avance.


moiii123
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
24 juin 2015 à 16:07
Ok
Attention à prendre en compte:
  • je ne fais pas de base de données, donc mon raisonnement s'appuie sur mon expérience des listes d'objets.
  • je n'ai pas VS sous la main, donc je tape sans intellisense et sans compilation pour vérifier.


Pour que tu puisses utiliser Display et Value Members, il faut que le combobox connaissent les membres en question, or tu ne lui renseignes qu'une colonne.

Je te donnes un exemple avec liste d'objets (avec le bémol de mon nota au dessus), soit la classe Contact

public class Contact
{
     public string Nom {get; set;}

     public string Prenom {get; set;}

     public string NomComplet {get{return string.Format("{0} {1}",Prenom, Nom");}}

}


si mesContacts est une List<T> de Contact, alors
monCombobox.DataSource = mesContacts;//là j'injecte toutes ma liste donc tous mes contacts avec tous leurs champ
monCombobox.DisplayMember = "NomComplet";//là je précise le nom du champ à afficher
monCombobox.ValueMember = "Nom";//ici le nom du champ qui sert de valeur




Donc tu peux essayer de mettre ton reader en datasource (je ne sais pas si c'est possible), de rentrer chaque ligne comme obejt (là non plus), ou enfin de te créer une liste d'objet de de gerer avec comme je viens de te le montrer


Une autre option est de te servir d'un bindingsoucre (voir ce tuto) mais je ne l'ai pas essayé avec un reader (c'est sensé fonctionner)
0
moiii123 Messages postés 19 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 avril 2016
24 juin 2015 à 17:11
D'accord, c'est impeccable.

Tout fonctionne bien.

Merci beaucoup.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
24 juin 2015 à 18:01
de rien
0