Problème DataSource => Combobox

cs_Redfire Messages postés 24 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 février 2009 - 19 févr. 2009 à 12:33
enviejob07 Messages postés 1 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 23 mai 2009 - 23 mai 2009 à 00:19
Bonjour, je débute en C#, j'espère que vous pourrez m'aider.
Voici mon problème :
Je dispose d'une base de données Access, je voudrais récupérer 2 champs d'une table (ID et Intitule) et afficher l'intitulé dans mon contrôle ComboBox. Jusque là, pas de soucis, mais j'aimerais que lorsqu'un item de mon Combobox est sélectionné, une MessageBox contenant l'ID apparaisse. Hors, avec mon code, la MessageBox ne m'affiche pas l'ID en lui-même, mais le texte "ID".
Voici mon code, si vous pouvez jeter un oeil et me dire ce qui cause celà, je vous en serais très reconnaissant.
Merci d'avance :-)

        private void FrmTest_Load(object sender, EventArgs e)
        {
            string MyConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBDatasource;

            OleDbConnection MyCn = new OleDbConnection();
            MyCn.ConnectionString = MyConnectionString;
            MyCn.Open();

            DataSet MyDs = new DataSet();
            OleDbDataAdapter MyDa = new OleDbDataAdapter();

            MyDa.SelectCommand = new OleDbCommand( "SELECT * FROM T_EtatCivil",MyCn);
            MyDa.Fill(MyDs);
            comboBox1.DataSource = MyDs.Tables[0];
            comboBox1.DisplayMember = "Intitule";
            comboBox1.ValueMember = "ID";
            MyDa.Dispose();
            MyDs.Dispose();
            MyCn.Close();
            MyCn.Dispose();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            MessageBox.Show(comboBox1.ValueMember.ToString());
        }

7 réponses

cs_Redfire Messages postés 24 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 février 2009 1
19 févr. 2009 à 12:35
Hum, je viens de me rendre compte que je n'ai pas spécifié sur quel Item il devait afficher la ValueMember, mais alors... comment faire ?
0
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
19 févr. 2009 à 12:41
Salut,

MessageBox.Show(comboBox.SelectemValue.ToString()); non?
0
cs_Redfire Messages postés 24 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 février 2009 1
19 févr. 2009 à 12:54
Merci pour ta réponse WishhhMaster.
Hmmmm, non, ça ne semble pas fonctionner comme ça.
Ma box contient des éléments non triés, ça me renvoie dans l'ordre "1,2,3,4,5,6,..."
Et pareil si je les trie, donc il ne semble pas me renvoyer la valeur du champ ID :/
0
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
19 févr. 2009 à 13:44
Tu as testé avec une structure???

Du genre :

struct TaStructure
        {
            public int _Id;
            public string _Intitule;

            public int Id
            {
                get { return _Id; }
                set {_ID = Value; }
            }
            public string Intitule
            {
                get { return _Intitule; }
                set {_Intitule = Value; }
            }
        }

Que tu renseigne à partir de ton résultat de requête et que tu intègre dans ta ComboBox .

Ce n'est qu'un idée, jespère au moins que ça te mettras sur la voie.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Redfire Messages postés 24 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 février 2009 1
19 févr. 2009 à 13:54
Ah non, effectivement.... J'essaie de suite, merci :-)
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
19 févr. 2009 à 14:02
Ces lignes me semblent un rien scabreuses :

comboBox1.DataSource = MyDs.Tables[0];
comboBox1.DisplayMember = "Intitule";
 comboBox1.ValueMember = "ID";
 MyDa.Dispose();
 MyDs.Dispose();
 MyCn.Close();
 MyCn.Dispose();

Tu détruit MyDs alors que comboBox1.DataSource lui fait référence. En C++ ce serait le plantage assuré. Je préconiserai de ne pas invoquer Dispose sur tes objets et de laisser faire le garbage collector.
0
enviejob07 Messages postés 1 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 23 mai 2009
23 mai 2009 à 00:19
té encore là ou pas?
0