Cauchemard combobox selecteditem [Résolu]

Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Dernière intervention
11 mars 2010
- 7 févr. 2008 à 22:45 - Dernière réponse :
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Dernière intervention
11 mars 2010
- 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 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
8 févr. 2008 à 10:41
3
Merci
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-

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
7 févr. 2008 à 22:57
0
Merci
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
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
7 févr. 2008 à 22:59
0
Merci
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
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Dernière intervention
11 mars 2010
8 févr. 2008 à 08:07
0
Merci
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
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
8 févr. 2008 à 09:21
0
Merci
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
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Dernière intervention
11 mars 2010
8 févr. 2008 à 09:43
0
Merci
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
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
25 octobre 2010
8 févr. 2008 à 10:45
0
Merci
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
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
25 octobre 2010
8 févr. 2008 à 10:46
0
Merci
owned by bidou !

Nul ne devient grand par la guerre...
Commenter la réponse de Miltiades
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Dernière intervention
11 mars 2010
8 févr. 2008 à 19:18
0
Merci
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
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
8 févr. 2008 à 19:43
0
Merci
MSDN mon ami, MSDN....

DataRowView
DataRow

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