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 :

Colonne à afficher dans une DGV


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 93
    Points : 130
    Points
    130
    Par défaut Colonne à afficher dans une DGV
    Bonjour,

    pour un projet que je dois faire, une des option est de pouvoir ajouter "dynamiquement" des champs personnalisable.

    Par exemple, si on gère une liste de client, on peut demander à ajouter un champ supplémentaire nommé "code d'accès"
    La liste de client est visible via un DataGridView, dans ce cas, il faudrait rajouter une colonne nommé "code d'accès"
    Pour l'affichage/ajout des colonnes, j'ai pas de difficulté particulière

    Bien sur, il faut l'a sauvegarder cette liste de client, j'ai pas cherché compliqué, je sérialise en fichier xml...

    Concernant ce champ ajouté dynamiquement (on peut ajouter un nombre fini de champ), ça se traduit bien entendu par une propriété dans l'objet de base...
    J'ai voulu mettre ses champs dans une autre classe spécialement faite pour l'occasion:

    Code C# : 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
     
    [Serializable]
    Public Class ClasseDeBase {
     
      // Divers propriétés normales
      public ExtendedFields ExtraFields { get; set; }
     
     [...]
    }
     
    [Serializable]
    public class ExtendedFields {
    public String Field1 { get; set; }
    public String Field2 { get; set; }
    [...]
    }

    Maintenant, dans ma WinForm, j'ai mon DGV myDataGridView:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<ClasseDeBase> myList = new List<ClasseDeBase>() { [...] }
    myDataGridView.DataSource = myList;
    Et là, dans mon DGV, la colonne ExtraFields indique uniquement le type de la donnée (ExtendedFields), ce qui est normal.

    Mon souci est que
    Je voudrais pouvoir afficher une colonne avec pour information le Field1 (ou n'importe lequel) de la propriété ExtraField qui est de type ExtendedFields.
    Comment puis-je m'y prendre?

  2. #2
    Membre confirmé
    Profil pro
    Expert technique .NET
    Inscrit en
    Août 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Expert technique .NET

    Informations forums :
    Inscription : Août 2007
    Messages : 272
    Points : 530
    Points
    530
    Par défaut
    Salut,

    C'est vrai qu'à première vue ta question à l'air simple, mais c'est pas évident du tout !!
    A priori, à part passer par la réflexion, je ne vois pas.

    Ou bien, mais c'est tordu, comme tes classes sont sérialisables, tu stocke tes objets, tu les dé-sérailises, en manipulant le flux XML tu supprime les balises <ExtendedFields> et </ExtendedFields>, puis tu transfères le tout dans un DataTable que lie au DataGridView par la propriété DataSource ...

    Une aspirine ne sera alors pas de trop ...

    Je vais bientôt avoir la même problématique, si tu as une meilleure solution, je prends !!

  3. #3
    Membre confirmé
    Profil pro
    Expert technique .NET
    Inscrit en
    Août 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Expert technique .NET

    Informations forums :
    Inscription : Août 2007
    Messages : 272
    Points : 530
    Points
    530
    Par défaut
    Re-bonjour,

    Si tu veux passer par la réflexion, voici un lien utile :
    http://msdn.microsoft.com/fr-fr/libr...iableinfo.aspx

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 93
    Points : 130
    Points
    130
    Par défaut
    ben j'ai choisi la solution de facilité :/

    c'est à dire, supprimé la classe ExtendedField et mettre toutes les propriétés dans la classe de base...
    mais je perd en modularité mais ça marche!

    Je connaissais pas la classe LocalVariableInfo, merci du lien mais je suis pas sur que ça règle le problème ...


    par contre, pour ton idée DataTable, c'est peut-être plus simple que ça en à l'air , du moins pour le côté chargement des données
    Faut penser à la sauvegarde des données également et diverses choses...
    Mais je fais faire un petit test dans cette optique

Discussions similaires

  1. [Débutant] Afficher dans une colonne précise
    Par heidi92 dans le forum VB.NET
    Réponses: 12
    Dernier message: 02/07/2014, 02h34
  2. [WD18] Afficher dans une colonne deux rubriques
    Par hicham-dj dans le forum WinDev
    Réponses: 4
    Dernier message: 20/03/2014, 13h29
  3. [AC-2007] Afficher colonne vide dans une requete analyse croisée
    Par julius26 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/07/2011, 11h59
  4. Réponses: 3
    Dernier message: 16/05/2006, 14h47
  5. colonne affichée dans une liste déroulante
    Par Tierisa dans le forum Access
    Réponses: 4
    Dernier message: 13/10/2005, 16h13

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