Combobox avec deux colonnes

Résolu
warzet
Messages postés
44
Date d'inscription
lundi 27 août 2007
Statut
Membre
Dernière intervention
1 novembre 2016
- 28 janv. 2014 à 08:38
Whismeril
Messages postés
17471
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
- 29 janv. 2014 à 11:17
Bonjour à tous,
J'écris une application, où j'ai besoin de remplir un Combobox à partir d'une base de données Access et je dois y transférer le Nom et le Prénom simultanément. j'ai essayé ceci:
        #region COMBO ENSEIGNANT

private void Combo_Enseignant()
{
try
{
//on remet le data_set a 0
DtS.Clear();
//on crée la connection a la base de données
this.Conex.ConnectionString = this.strConex;
//déclaration de la requete sql
string sqlEnseignant = "SELECT code_personnel," + "\n" +
"'" + (string.Concat("nom_personnel", " ", "prenom_personnel")) + "'AS nom" + "\n" +
"FROM Enseigner, Personnels" + "\n" +
"WHERE Enseigner.code_enseignant = Personnels.code_personnel" + "\n" +
"ORDER BY '" + string.Concat("nom_personnel", " ", "prenom_personnel") + "'";
OleDbDataAdapter DtAEnsg = new OleDbDataAdapter(sqlEnseignant, this.Conex);
//on leve l'exception
try
{
//on rempli la dataset avec la table
DtAEnsg.Fill(this.DtS, "Personnels");

this.xTotal = DtS.Tables[0].Rows.Count;

//on rempli la liste avec le dataset
this.DtTEns = DtS.Tables["Personnels"];

//on rempli le ComboClass
this.cboEnseignant.DataSource = this.DtTEns;

//Choix du champ de la liste
this.cboEnseignant.DisplayMember = "'" + string.Concat("(Personnels.nom_personnel)" + " " + "(Personnels.prenom_personnel)'");
this.cboEnseignant.DisplayMember = (string.Concat("nom_personnel", " ", "prenom_personnel"));
//choix de l'id du champs
this.cboEnseignant.ValueMember = "code_personnel";

//on met la sélection vide
//this.cboEnseignant.SelectedIndex = -1;
this.cboEnseignant.Text = "---Sélectionnez Enseignant---";
this.cboEnseignant.Focus();
this.cboEnseignant.SelectAll();
this.txtCodeEnseignant.Text = "";

this.AcceptButton = this.btnNouveau;
}
catch (Exception ex)
{
//affichage de l'érreur
MessageBox.Show("Erreur : " + ex.Message);

//on ferme la connection
this.Conex.Close();

}

//rafraichissement de la fenetre
this.Show();

//on ferme la connection
this.Conex.Close();

}
catch
{
}
}

#endregion

Mais cela ne marche pas, y a-t-il une façon de faire pour remplir un combo avec plusieurs colonnes; Aidez moi

4 réponses

Whismeril
Messages postés
17471
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
599
28 janv. 2014 à 11:14
Bonjour,

si tu dois afficher Nom et Prénom (attention je ne dis pas faire 2 colonnes dans ton combobox), une solution est de charger tes données dans une List<T>:
    public class Contact//ta classe perso
    {
        public string Nom { get; set; }

        public string Prenom { get; set; }

        public override string ToString()//je réécris ToString pour que soit affiché: "Je m'appelle Jean Sor"
        {
            return string.Format("Je m'appelle {0} (1}", Prenom, Nom);
        }
    }
}


Tu charges donc tes données dans une List<Contact> (mesContacts) et tu le mets en datasource de ton combobox.

cboEnseignant.DataSource = mesContact;


Si ça t'ennuie d'overider ToString tu peux écrire une propriété NomComplet
    public class Contact
    {
        public string Nom { get; set; }

        public string Prenom { get; set; }

        public DateTime Naissance { get; set; }

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

        public override string ToString()
        {
            return string.Format("Je m'appelle {0} (1}", Prenom, Nom);
        }
    }


et tu te sers du DisplayMember
cboEnseignant.DataSource = mesContact;
cboEnseignant.DisplayMember ="NomComplet";
0
warzet
Messages postés
44
Date d'inscription
lundi 27 août 2007
Statut
Membre
Dernière intervention
1 novembre 2016

28 janv. 2014 à 13:17
Merci à toi Whismeril, mais alors comment je fais pour récuperer le code_enseignant qui est dans
cboEnseignant.ValueMember = "code_personnel"

dont j'ai besoin pour l'enregistrement. Et saches que les enregistrements proviennent d'une Table d'une Base de Données Access. Merci pour ton aide
0
Whismeril
Messages postés
17471
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
599
28 janv. 2014 à 13:23
A toi d'adapter ta classe métier à ton besoin, il te suffit d'ajouter une propriété code_enseignant.
Si tu utilises un databindingsource tu pourras faire s'afficher le dit code_enseignant dans un textbox dès la sélection par l'utilisateur, sans code particulier.
Tu pourras aussi récupérer l'enregistrement courant pour te servir de cette donnée.

0
Whismeril
Messages postés
17471
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
599
28 janv. 2014 à 13:26
PS je ne fait pas de base de données, alors pour le chargement de ta table Access, je ne t'aiderai pas beaucoup.
A mes début, j'aurais pu utiliser une connection Access, mais Linq n'était pas compatible (aujourd'hui je ne sais pas), et ayant environ 50 lignes d'enregistrements j'ai finit par faire du xml.
0
warzet
Messages postés
44
Date d'inscription
lundi 27 août 2007
Statut
Membre
Dernière intervention
1 novembre 2016

29 janv. 2014 à 10:11
j'ai simplifié en créant une requête sous Access pour stocker le code du personnel et la concaténation du nom et du prénom auquel je fais appel ensuite dans mon combobox Merci à toi
0
Whismeril
Messages postés
17471
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
599
29 janv. 2014 à 11:17
De rien.
0
warzet
Messages postés
44
Date d'inscription
lundi 27 août 2007
Statut
Membre
Dernière intervention
1 novembre 2016

28 janv. 2014 à 13:35
Merci pour tout, je vais m'y mettre et t'en donner des nouvelles. Encore merci.
0
Whismeril
Messages postés
17471
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
599
28 janv. 2014 à 15:52
De rien ;). N'oublie pas de mettre le sujet résolu si la solution te convient
0