Cauchemard combobox selecteditem [Résolu]

olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 7 févr. 2008 à 22:45 - Dernière réponse : olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention
- 8 févr. 2008 à 20:57
tout d'abord un bon coup de gueulle sur la documentation parfaitement hermetique de MS concernant l'environement .NET, manque d'exemple etc..

Bravo a ce site qui comble en grande partie cette lacune originale

Et la palme d'or d'hermetisme pour l'utilisation d'un obet tout simple : le combo box !!!

Comment puis-je recuperer la valeur de l'element selectionné
selecteditem ?

l'assignation

string test = combobox.SelectedItem.ToString();

me donne dans test : "System.data.datarowview"

Et une recheche sur le net ne donne  AUCUN exemple clair de recuperation d'une valeur effective

Au secours
Afficher la suite 

11 réponses

Répondre au sujet
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 8 févr. 2008 à 10:41
+3
Utile
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...).

Logique, non?

<hr />
-My Blog-
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Bidou
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 7 févr. 2008 à 22:57
0
Utile
Bonsoir,
La MSDN est une documentation extrêment fournie, je n'en connais aucune qui le soit autant..:
Pour ta question:

string str = (
string)
this.comboBox.SelectedItem;

<hr />
-My Blog-
Commenter la réponse de cs_Bidou
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 7 févr. 2008 à 22:59
0
Utile
ToString fonctionne aussi...
Dans les deux cas, il faut évidemment veiller à avoir insérer des strings dans la combo et pas des objets...

<hr />
-My Blog-
Commenter la réponse de cs_Bidou
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 8 févr. 2008 à 08:07
0
Utile
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
Commenter la réponse de olibara
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 8 févr. 2008 à 09:21
0
Utile
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)

<hr />
-My Blog-
Commenter la réponse de cs_Bidou
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 8 févr. 2008 à 09:43
0
Utile
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)

      cb_chauff.DataSource = dschauff.Tables[0];
      cb_chauff.DisplayMember = "nom";
      cb_chauff.ValueMember = "chauffeurID";

Si je veux recuperer l'ID du chauffeur selectionné
      string chauf = this.cb_chauff.SelectedItem.ToString();  // ne marche pas !! 

 le contenu de chauf devient : "System.data.datarowview"

Il FAUT utiliser
      string chauf = this.cb_chauff.SelectedValue.ToString();

Je n'ai pas trouvé d'autres moyens pour recuperer les éléments de SelectedItem dans le cas présent
Commenter la réponse de olibara
Miltiades 233 Messages postés vendredi 21 mars 2003Date d'inscription 25 octobre 2010 Dernière intervention - 8 févr. 2008 à 10:45
0
Utile
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

Nul ne devient grand par la guerre...
Commenter la réponse de Miltiades
Miltiades 233 Messages postés vendredi 21 mars 2003Date d'inscription 25 octobre 2010 Dernière intervention - 8 févr. 2008 à 10:46
0
Utile
owned by bidou !

Nul ne devient grand par la guerre...
Commenter la réponse de Miltiades
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 8 févr. 2008 à 19:18
0
Utile
Attention SelectedItem est bien un élément de type DataRowView et non DataRow

Quelle est la subtile différence ?
Commenter la réponse de olibara
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 8 févr. 2008 à 19:43
0
Utile
MSDN mon ami, MSDN....

DataRowView
DataRow

<hr />
-My Blog-
Commenter la réponse de cs_Bidou
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 8 févr. 2008 à 20:57
0
Utile
Bon allez !
Je vais aller dire bonjour a ton ami
Et essayer d'etre gentil avec lui pour qu'il devienne gentil avec moi !
Commenter la réponse de olibara

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.