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 :

Winform DataPropertyName sur Datagridview d'une classe [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Par défaut Winform DataPropertyName sur Datagridview d'une classe
    Bonjour à tous,

    Voilà mon souci, coté classes ça donne ça:
    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
        // une de mes classes
        public class Transport
        {
            public string Identifier { get; set; }
            public string Type { get; set; }
            public Instructions Instruction { get; set; }
            public string Metadata { get; set; }
        }
     
        // une autre de mes classes
        public class Instructions 
        {
            public string Identifier { get; set; }
            public string Label { get; set; }
            public bool Enabled { get; set; }
        }
    coté code de mon winform, j'ai créé
    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
    readonly BindingList<Transport> myTransports = new BindingList<Transport>();
     
    // avec la création en manuelle de mes colonnes de dgv
                DgvTransports.AutoGenerateColumns = false;
                DgvTransports.Columns.Add(new DataGridViewCheckBoxColumn
                {
                    DataPropertyName = "Select",
                    HeaderText = "",
                    Width = 20,
                    Resizable = DataGridViewTriState.False
                });
                DgvTransports.Columns.Add(new DataGridViewTextBoxColumn
                {
                    DataPropertyName = "Identifier",
                    HeaderText = "Id",
                    ReadOnly = true
                });
                DgvTransports.Columns.Add(new DataGridViewTextBoxColumn
                {
                    DataPropertyName = "Type",
                    HeaderText = "Type Transport"
                    Resizable = DataGridViewTriState.False
                });
     
                // Le binding
              DgvTransports.DataSource = myTransports;
    Pour ajouter des lignes à mon dgv, je passe par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       myTransports.Add( new Transport(...);
    Question: Comment je dois définir mes DataPropertyName de mes colonnes pour afficher par exemple la partie Instructions.Label de mon objet transport
    DataPropertyName ="Transport.Instructions.Label"; ne fonctionne pas

    Est-ce que je m'y prends mal ? Faut-il passer par un datatable, dataset ou autre chose ?

    Merci d'avance pour votre aide sur ce problème de grand débutant :-/

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    DataPropertyName ne sert pas à ça.

    Si tu veux redéfinir le titre de l'en-tête de la colonne, il faut ajoute un attribut DisplayName sur la propriété correspondante.
    Si c'est la valeur que tu veux changer dans les différentes lignes (ce qui est certainement le cas), il faut surcharger la méthode ToString() de la classe Instructions.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Par défaut
    Citation Envoyé par popo Voir le message
    DataPropertyName ne sert pas à ça.

    Si tu veux redéfinir le titre de l'en-tête de la colonne, il faut ajoute un attribut DisplayName sur la propriété correspondante.
    Si c'est la valeur que tu veux changer dans les différentes lignes (ce qui est certainement le cas), il faut surcharger la méthode ToString() de la classe Instructions.
    Effectivement c'est bien affiche le contenu de l'objet Instructions que je veux effectuer. Ce qui m'étonne c'est que DataPropertyName que j'ai défini pour ma classe Transport fonctionne parfaitement.
    Mon affichage se présente sous la forme pour chaque ligne d'une case à cocher, de la valeur DataPropertyName="Identifier" de mon transport, de son type de transport DataPropertyName="Type" et je dois ajouter le Label de mon Instructions...

    Peux tu me donner un exemple pour surcharge la méthode ToString() de la classe Instructions stp ?

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public override String ToString()
    {
       return Label;
    }
    C'est quand même la base !!
    Si ça, c'est déjà trop compliqué pour toi, je te suggère fortement de faire quelques tutoriels de POO avant de te lancer dans un projet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [c#] Accesseurs sur tableaux d'une classe
    Par tribaleur dans le forum Windows Forms
    Réponses: 8
    Dernier message: 31/12/2009, 00h36
  2. probleme sur creation d'une classe avec netbeans 6.5
    Par bambi98 dans le forum NetBeans
    Réponses: 1
    Dernier message: 25/03/2009, 19h17
  3. Réponses: 6
    Dernier message: 16/04/2008, 13h51
  4. Réponses: 3
    Dernier message: 09/04/2008, 17h45
  5. Réponses: 2
    Dernier message: 04/12/2005, 21h10

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