cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 8 févr. 2008 à 10:41
Oui c'est normal, car quand tu passes par un DataSource, il insère des éléments (des objets) de type DataRow (DataRowView?).
Tu pourrais très bien récupérer ce DataRow en faisant DataRow dr = (DataRow)cb.SelectedItem; et faire ensuite les traitements nécessaire avec cet object.
Pour simplifier les choses, le comboBox à un DisplayMember (pour afficher) et un ValueMember (pour stocker une valeur utile, mais pas pour l'utilisateur, typiquement une id). Dans ton cas, c'est clair qu'il faut passer par SelectedValue qui te retourne ton object (une id...).
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 8 févr. 2008 à 08:07
Merci
Pour la doc : extremement fournie pour le baba certe ! mais pas particulierement explicite en ce qui concernes les astuces particulieres et les exemples
bien sur quand on a capté la doc n'est plus qu'un aide memoire certainement tres efficace
mais quand on débute bonjour les sorties de routes !!
pour ta réponse, j'avais expliqué que la methode tostring me donnait comme resultat "System.data.datarowview"
Apres multiple tatonnement j'ai découvert la methode selectedvalue() qui me donne effectivement la valeur attendue
Mon combo a été rempli par un datasource dataset.table issu d'un query mysql
Grace a ta reponse j'ai compris la subtilité pas du tout mise en évidence dans la doc.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 8 févr. 2008 à 09:21
MSDN est très très fourni en exemple!
Je ne pense pas que tu as compris ce que fais SelectedItem:
La comboBox affiche des strings, mais contient des objets ! C'est à dire que quand tu fais l'ajout avec la méthode Add (ou avec le designer) alors tu peux spécifier n'importe quel type, par un exemple un Arbre (un object créer par tes soins).
Comment sait la comboBox quel string il doit afficher? Simple: il appelle la méthode ToString de cet object.
SelectedItem renvoie donc l'objet (en l'occurence un arbre), et si tu as appelle ToString, ça ca sera le String associé à cet objet.
Pour faire un test simple qui illustre bien ça, regrade ce code:
this.comboBox.Items.Clear();
this.comboBox.Items.Add(
"salut");
this.comboBox.Items.Add(
"coucou");
this.comboBox.Items.Add(
"bonjour");
this.comboBox.Items.Add(
"test");
SelectedItem, si je suis sur l'élément 0, me retournera "salut", car c'est un string.
this.comboBox.Items.Clear();
this.comboBox.Items.Add(
new
Point(1, 4));
this.comboBox.Items.Add(
new
Point(2, 3));
this.comboBox.Items.Add(
new
Point(3, 2));
this.comboBox.Items.Add(
new
Point(4, 1));
SelectedItem, si je suis sur l'élément 1, me retourne "{X=2,Y=3}", il a appelé ToString sur l'object Point (qui est en fait une structure)
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 8 févr. 2008 à 09:43
Merci pour ton explication
Mais si elle est bien claire sur le fait que le combobox contient des objets
Elle ne me dit toujours pas comment recuperer la valeur de ces objet quand ce ne sont pas des strings !
Pratiquement voici comment je remplis le combo :
MySqlDataAdapter adachauff = new MySqlDataAdapter();
selectcmd = "SELECT chauffeurID,naam FROM `chauffeurs`";
adachauff.SelectCommand = new MySqlCommand(selectcmd, conn);
DataSet dschauff = new DataSet();
adachauff.Fill(dschauff);
DataRow _rowx = dschauff.Tables[0].Rows.Add();
_rowx["chauffeurID"] = 0;
_rowx["naam"] = "ALL";
(ca c'est pour ajouter la possibilité d'un default ALL select : mais je conviens qu'il vaudrait mieux passer par un datatable découplé de la DB)
Miltiades
Messages postés233Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 octobre 2010 8 févr. 2008 à 10:45
c'est parce que t'as pas assez reflechit a ce que t'as dit Bidou...
il vient de te dire que ta combobox contient ce que tu lui mets dedans...
en l'occurence, toi, avec ton code, tu lui fournis des datarows (l'element de base d'une datatable...)
et le tostring d'un datarow renvois... le nom du type de l'objet...
maintenant, si tu cast ton select value avec un cast approprié, tu devrais pouvoir retrouver ce que tu cherches