Cauchemard combobox selecteditem

Résolu
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 7 févr. 2008 à 22:45
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre 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
A voir également:

11 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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...).

Logique, non?

<hr />
-My Blog-
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 févr. 2008 à 22:57
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-
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 févr. 2008 à 22:59
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-
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
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
0

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

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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)

<hr />
-My Blog-
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
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)

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

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

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

Quelle est la subtile différence ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 févr. 2008 à 19:43
MSDN mon ami, MSDN....

DataRowView
DataRow

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