Combobox avec deux colonnes [Résolu]

Messages postés
44
Date d'inscription
lundi 27 août 2007
Dernière intervention
1 novembre 2016
- - Dernière réponse : Whismeril
Messages postés
12426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 décembre 2018
- 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
Afficher la suite 

Votre réponse

4 réponses

Messages postés
12426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 décembre 2018
0
Merci
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";
Commenter la réponse de Whismeril
Messages postés
44
Date d'inscription
lundi 27 août 2007
Dernière intervention
1 novembre 2016
0
Merci
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
Commenter la réponse de warzet
Messages postés
12426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 décembre 2018
0
Merci
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.

Whismeril
Messages postés
12426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 décembre 2018
-
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.
warzet
Messages postés
44
Date d'inscription
lundi 27 août 2007
Dernière intervention
1 novembre 2016
-
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
Whismeril
Messages postés
12426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 décembre 2018
-
De rien.
Commenter la réponse de Whismeril
Messages postés
44
Date d'inscription
lundi 27 août 2007
Dernière intervention
1 novembre 2016
0
Merci
Merci pour tout, je vais m'y mettre et t'en donner des nouvelles. Encore merci.
Whismeril
Messages postés
12426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 décembre 2018
-
De rien ;). N'oublie pas de mettre le sujet résolu si la solution te convient
Commenter la réponse de warzet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.