Bindingsource et datagridview

herakles66 Messages postés 8 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 11 mai 2009 - 11 mai 2009 à 13:26
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 11 mai 2009 à 16:19
Bonjour !

Voilà j'aurais besoin d'un petit avis sur le problème que je me pose ...

Dans mon code je fais le lien entre mes listes que je souhaite afficher et mon datagridview par une bindingsource.
Jusqu'a present tout marche bien, j'ai bien l'affichage de chacune de mes variables de classe dans une colonne spécifique, avec la bonne valeur pour chacun des objets de la liste.

Le problème est que j'ai rajouté une variable de classe dans ma liste qui n'est pas d'un type classique comme "string" ou "int" ou "bool". C'est une variable du type d'une classe que j'ai crée. Dans mon datagrid, une colonne est bien apparu pour cette variable mais l'information qui est présente est juste l'emplacement de l'objet. (nomDuDomaine.nomDeLObjet, pour tous les objets de la liste).

Je voudrais savoir s'il est possible dans la cellule de faire apparaitre les propriétés de l'objet lui même, plutot que juste son emplacement.
Bien entendu j'ai essayé plusieurs recherches sur le net pour trouver une solution, mais elles sont restées infructueuses...

Merci d'avance pour vos idées, voire vos solutions !

4 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
11 mai 2009 à 14:56
Salut.

Tes données sont donc du genre :

class mesDonnees
{
string MaProp1 {get; set; }
string MaProp2 {get; set; }
int MaProp3 {get; set; }
perso MaProp4 {get; set; }
}

class perso
{
string MaPropPerso1 {get; set; }
string MaPropPerso2 {get; set; }
}

Ce que tu souhaites, dans ta datagridview de "mesDonnees", c'est afficher MaProp1, MaProp2, MaProp3 et MaProp4.MaPropPerso2 par exemple ?

Tes colonnes sont créées automatiquement en fonction de tes variables ? Dans ce cas, tu ne peux pas directement je crois.
Cependant, tu dois pouvoir, lorsque tu crées toi-même une colonne, choisir la donnée que tu bind (donc tu peux mettre un attribut de ta variable).

Il existe un autre moyen, en gardant tes colonnes créées automatiquement, c'est de surcharger la méthode "ToString()" de ta classe "perso" :

public override string ToString()
{
    return MaPropPerso2;
}

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
herakles66 Messages postés 8 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 11 mai 2009
11 mai 2009 à 15:48
Ce que tu souhaites, dans ta datagridview de "mesDonnees", c'est
afficher MaProp1, MaProp2, MaProp3 et MaProp4.MaPropPerso2 par exemple ?

Oui c'est exactement ça. L'affichage de MaProp1, MaProp2, MaProp3 est bien effectué, je cherche à afficher MaProp4.MaPropPerso1 + MaProp4.MaPropPerso2 dans la meme cellule, plutôt que le nom de l'objet qui n'est pas une information très utile :s. Effectivement mes colonnes sont générées automatiquement en "bindant"
la source de ma dataGrid sur ma liste<mesDonnees> ( pour
reprendre ton exemple)

Je vais essayer la méthode ToString, effectivement ça pourrait être ce qu'il me faut !

Merci
0
herakles66 Messages postés 8 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 11 mai 2009
11 mai 2009 à 16:04
Ca marche bien !

En revanche (c'est du chipotage peut être ^^) il n'a pas l'air d'accepter les "\n" pour afficher les propriétés les unes en dessous des autres dans la même cellule. A la place il me met un caractère rectangulaire. (j'ai aussi essayer avec \t il fait pareil)
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
11 mai 2009 à 16:19
Oui, un dgv ne permet pas d'afficher plusieurs lignes dans une seule cellule je crois.
Ca fait quelques temps que je ne touche plus à Winforms, donc je n'affirme rien, mais peut-être qu'une listbox ou un listview te permettra d'aboutir à ce que tu veux.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
Rejoignez-nous