IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Alimenter DatagridView par une collection d'objets avec getters mais sans propriétés.


Sujet :

Windows Forms

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut Alimenter DatagridView par une collection d'objets avec getters mais sans propriétés.
    Bonjour,

    J'ai un objet MonObjet, et sa collection List<MonObjet>.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class MonObjet
    {
       ....
       public String GetId() {....}
       public String GetDescription {...}
       ....
    }
    Il n'a pas de propriétés définies dans MonObjet, uniquement des variables membres avec leurs getters.

    Cependant, je veux tout de même faire apparaître son contenu de ma liste d'objets dans un DataGridView. Comment dois-je procéder?

    (Le code de MonObjet doit rester tel qu'il est. Il faut considérer qu'il est sealed et que l'on a pas son source. C'est à dire qu'on ne peut pas intervenir dessus pour ajouter quelque-chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public string ID 
    {        
       get { .... }        
       set { .... }     
    }
    Nous avons simplement ses deux getters à notre disposition).

    En vous remerciant de vos réponses,

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Pas possible. Le binding entre une colonne et un objet se fait en récupérant la propriété de l'objet du nom donné.
    Comme possibilités, tu peux wrapper cette classe dans une autre, qui elle a des propriétés ; tu dois pouvoir aussi t'abonner à certains events de la DGV, qui se déclenchent quand elle va chercher les valeurs métier de sa source.
    ಠ_ಠ

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu peux utiliser le DGV en mode virtuel. Dans ce cas, tu fournis manuellement les valeurs dans l'évènement CellValueNeeded.
    Plus de détails :
    http://msdn.microsoft.com/fr-fr/library/ms171622.aspx

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut
    Le lien que tu m'as donné semble apporter la solution, mais sa mise en place a l'air rude. La quantité de lignes à écrire m'a impressionné: il faut (?) réécrire une sacré portion du comportement par défaut de la GridView alors que l'objectif final - ridicule en regard - c'est de joindre simplement deux getters, publics, renvoyant le String d'une valeur de l'objet. Objet qui est pourtant celui présenté au travers de la collection précisément parcourue par le DataGridView.
    Cela m'éffraie, parce que bien-sûr je ne suis pas très compétent en C#, mais ça me semble être un marteau-pilon pour écraser une mouche.

    Et cela m'embête, parce que j'ai toute une série d'objets issus de C++ qui me posent ce problème. Faut-il que je cherche en direction d'autres contrôles graphiques, qui ne s'appellent pas DataGridView, mais qui savent utiliser la réflexion "normale" pour invoquer une méthode et lire son contenu? Mais est-ce qu'il y en a?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    effectivement ça peut être assez lourd de mettre en place le mode virtuel... d'un autre côté, si le DGV est en lecture seule, tu as juste l'évènement CellValueNeeded à gérer, tu peux ignorer les autres.

    Sinon, il reste la solution proposée par Guulh : créer des wrappers pour tes classes métier, dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class MonObjetWrapper
    {
     
       private MonObjet _data;
     
       public MonObjectWrapper(MonObjet data)
       {
            this._data = data;
       }
     
       public string Id
       {
          get { return _data.GetId(); }
          set { _data.SetId(value); }
       }
     
       public string Description
       {
          get { return _data.GetDescription(); }
          set { _data.SetDescription(value); }
       }
     
    }

Discussions similaires

  1. Création d'une collection d'objets avec un ordre de stockage particulier
    Par ahmadou_20 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 29/08/2014, 15h42
  2. Réponses: 3
    Dernier message: 09/05/2012, 11h18
  3. Réponses: 4
    Dernier message: 04/11/2010, 16h17
  4. Afficher une collection d'objets dans une datagridview
    Par thorgal1612 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/04/2007, 17h38
  5. Dataset interfacé avec une Collection d'objets
    Par boulo dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 16/03/2007, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo