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

C# Discussion :

Cacher visuellement des proprietés héritées


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Cacher visuellement des proprietés héritées
    Bonjour

    Je viens de découvrir un comportement qui me dérange
    Si je cree une List<List<C>> d'une classe, et que je bind cette liste a un Datagridview, toute les propriétés publique de ma classe appairaitront automatiquement dans le datagridview MAIS AUSSI les propriétés Capacity et Count de chaque Liste

    Pour empecher cela la premiere solution c'est de faire un binding Manuel en declarant préalablement les colonnes et dataproperty que l'on veut Binder (mais c'est toujours un peu fastidieux)

    La deuxieme que j'ai bricolée est la suivante (en quelque sorte je fais une surcharge des propriétés en rendant cette surcharge non browsable)

    Ca marche mais je ne sais pas jusqu'a quel point c'est fiable !

    Un avis ?


    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
    24
    25
    26
    27
    28
    29
    30
    31
      public class C_Tour : List<C_TourAdr>
      {
        static public C_TourOrder1Comparer sortOrder1 = new C_TourOrder1Comparer();
        static public C_TourOrder21Comparer sortOrder21 = new C_TourOrder21Comparer();
     
     
        [Browsable(false)]
        public int Capacity 
        {
          get
          {
            return base.Capacity;
          }
          set
          {
            base.Capacity = value;
          }
        }
        [Browsable(false)]
        public int Count 
        {
          get
          {
            return base.Count;
          }
        }
     
        public bool Zie { get; set; }
        public bool Werk { get; set; }
        public int Dag { get; set; }
    }
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    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
    Citation Envoyé par olibara Voir le message
    Si je cree une List<List<C>> d'une classe, et que je bind cette liste a un Datagridview, toute les propriétés publique de ma classe appairaitront automatiquement dans le datagridview MAIS AUSSI les propriétés Capacity et Count de chaque Liste
    Bizarre, chez moi ça affiche seulement Capacity et Count, ce qui me semble logique d'ailleurs... comment as-tu bindé les données ? Je ne vois pas trop comment un DGV pourrait afficher une liste de listes...

    EDIT: ah mais en fait c'est pas les propriétés de C que tu affiches, c'est celles de la liste... donc c'est pas vraiment une List<List<C>>, c'est une List<C_Tour>.

    Dans ce cas, je ne pense pas qu'il y ait d'autres solutions simples. Tu pourrais créer les colonnes manuellement, mais c'est un peu plus galère...

    Soit dit en passant, je ne pense pas que ce soit une bonne pratique d'hériter de List<T> pour y ajouter des propriétés. Déjà, si tu fais ça, ces propriétés ne seront pas prises en compte par la sérialisation XML (mais peut-être que tu t'en fous). Il vaudrait mieux créer une classe spécifique pour ces données, avec une propriété qui contiendrait la liste.

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Fiable, ca ne l'est pas
    Première chose, il y a de grandes chances qui Visual Studio te souligne en bleu tes propriétés car tu caches l'implem qui n'a pas été prévue pour être redefinie. Un warning va donc te dire de mettre new si c'est voulu. Mais dans ce cas là, attention au polymorphisme !

    Seconde chose, il est préfèrable d'hériter de System.Collections.ObjectModel.Collection<T> plutôt que de List<T>. Elle a été concue pour être dérivée.

    Ensuite, comme solution tu peux essayer de passer par ICustomTypeDescriptor qui est utilisé si disponible pour générer les colonnes.

Discussions similaires

  1. Cacher/afficher des boutons
    Par philippef dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/09/2005, 16h09
  2. Réponses: 1
    Dernier message: 24/08/2005, 09h42
  3. [SWING][JTable]Cacher noms des colonnes
    Par Antunes dans le forum Composants
    Réponses: 2
    Dernier message: 28/06/2004, 11h48
  4. [VB6] récuperation des propriétés d'un fichier exe
    Par ulrick dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/03/2004, 00h08
  5. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37

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