Cauchemard combobox selecteditem [Résolu]

Signaler
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
-
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
-
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

11 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
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-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
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-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
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-
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
3
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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
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-
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
3
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
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

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...
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

owned by bidou !

Nul ne devient grand par la guerre...
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
3
Attention SelectedItem est bien un élément de type DataRowView et non DataRow

Quelle est la subtile différence ?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
MSDN mon ami, MSDN....

DataRowView
DataRow

<hr />
-My Blog-
Messages postés
670
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
3
Bon allez !
Je vais aller dire bonjour a ton ami
Et essayer d'etre gentil avec lui pour qu'il devienne gentil avec moi !