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

VB.NET Discussion :

Remplir un DataGridView avec une classe personnalisée


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut Remplir un DataGridView avec une classe personnalisée
    Bonjour,
    J'ai une classe personnalisée nommée 'Traitement' dans laquelle se trouve plusieurs autres classes, que je nommerai sous-classes dans la suite, et qui sont 'Equipement', 'Entree', 'Ligne', ...
    J'aimerais pouvoir afficher dans un DataGridView, les propriétés de chacune de ces sous-classes. C'est à dire, chaque ligne de mon DataGridView représenterai un 'Traitement' et chaque colonne une des propriétés des sous-classes contenus dans 'Traitement'. J'arrive à faire ça mais en déclarant chaque propriété de mes sous-classes ('Equipement', 'Entree', ...) en tant que propriété de la classe 'Traitement' mais je trouve ça un peu lourd car si à l'avenir je devais ajouter une propriété à mes sous-classes je devrais modifier ma classe 'Traitement' et ajouter la propriété manuellement.
    Est-il donc possible d'afficher les propriétés de mes sous-classes dans un DataGridView ?
    Merci à vous et bonne fin d'année.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Public Class Traitement
        Private _Equipement As Equipement
        Private _Entree As Entree
        Private _Ligne As Ligne
        Private _Source As Source
        Private _Analyses As Analyses
        Private _DateHeureDebut As DateTime
        Private _DateHeureFin As DateTime
     
     
        Public Sub New(DTOTraitement As DTOTraitement)
            With DTOTraitement
                _Equipement = New Equipement(.CodeEquipement, .NomEquipement, .CommentaireEquipement)
                _Entree = New Entree(.CodeEntree, .NomEntree, .PositionEntree, .CommentaireEntree)
                _Ligne = New Ligne(.CodeLigne, .NomLigne, .CommentaireLigne)
                _Source = New Source(.IdentifiantSource, .NumeroContenant, .DateHeureDisponibilite, .CommentaireSource, .DesignationProduit, .ProducteurProduit, .CommentaireProduit, .CodeClassification, .NomClassification, .IdentifiantContenant)
                _DateHeureDebut = .DateHeureDebut
                _DateHeureFin = .DateHeureFin
            End With
        End Sub
     
     
        Public Property Equipement() As Equipement
            Get
                Return _Equipement
            End Get
            Set(value As Equipement)
                _Equipement = value
            End Set
        End Property
     
     
        Public Property Entree() As Entree
            Get
                Return _Entree
            End Get
            Set(value As Entree)
                _Entree = value
            End Set
        End Property
     
     
        Public Property Ligne() As Ligne
            Get
                Return _Ligne
            End Get
            Set(value As Ligne)
                _Ligne = value
            End Set
        End Property
     
     
        Public Property Source() As Source
            Get
                Return _Source
            End Get
            Set(value As Source)
                _Source = value
            End Set
        End Property
     
     
        Public Property DateHeureDebut() As DateTime
            Get
                Return _DateHeureDebut
            End Get
            Set(value As DateTime)
                _DateHeureDebut = value
            End Set
        End Property
     
     
        Public Property DateHeureFin() As DateTime
            Get
                Return _DateHeureFin
            End Get
            Set(value As DateTime)
                _DateHeureFin = value
            End Set
        End Property
     
     
    End Class

  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
    Citation Envoyé par thibab Voir le message
    J'arrive à faire ça mais en déclarant chaque propriété de mes sous-classes ('Equipement', 'Entree', ...) en tant que propriété de la classe 'Traitement' mais je trouve ça un peu lourd car si à l'avenir je devais ajouter une propriété à mes sous-classes je devrais modifier ma classe 'Traitement' et ajouter la propriété manuellement.
    Tu ne va pas apprécier ma réponse.
    Mais la bonne façon de faire est encore plus lourde si on applique tes critères.

    Normalement, tu dois pouvoir changer l'interface graphique sans être obligé de changer ta logique métier et inversement.
    Donc faire un objet métier complètement lié à l'affichage est en soit une mauvaise idée car si tu changes ta grille pour autre chose, tu devras tout refaire.

    A la place, il faut avoir les objets de présentation d'un coté et les objets de traitements de l'autre (avec potentiellement un objet pour faire le lien).
    Il te faut donc ta classe Traitement (telle quelle avec son organisation hiérarchisée) coté métier.
    Il te faut en plus une seconde classe TraitementPourGrille avec des propriétés à plat pour coller à ce qu'attend la grille coté présentation.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    Merci pour ta réponse Popo. Je ne suis pas très expérimenté dans la conception d'application mais avec le temps j'apprends. Contrairement à ce que tu penses, ta réponse me plait bien et pointe l'erreur vers laquelle je me dirigeais. Je comprends très bien ce que tu veux dire. Mon application est bien découpée en plusieurs couches (une couche d'accès aux données, une couche métier et une couche présentation) et je vais donc placer dans la couche présentation, et non pas dans la métier, l'extraction des propriétés que j'ai besoin.
    Merci encore.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    Je viens de faire ça avec en Linq sous VbNet dans ma couche de présentation. Impeccable, je suis arrivé à ce que je voulais. Merci Popo de m'avoir aiguillé.

    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
    Private Sub MajListeTraitements(codeEquipement As String, dateHeureDebut As DateTime, dateHeureFin As DateTime, Optional codeEntree As String = Nothing)
        Dim maListeTraitements As New Traitements(codeEquipement, dateHeureDebut, dateHeureFin, codeEntree)
        Dim maListe = (From element In maListeTraitements
                       Where element.Entree.Code = codeEntree
                       Select New With {Key .NomLigne = element.Ligne.Nom,
                                            .IdentifiantSource = element.Source.Identifiant,
                                            .DesignationProduit = element.Source.DesignationProduit,
                                            .ProducteurProduit = element.Source.ProducteurProduit,
                                            .DateHeureDebut = element.DateHeureDebut.ToLocalTime,
                                            .DateHeureFin = element.DateHeureFin.ToLocalTime}).OrderByDescending(Function(x) x.DateHeureDebut).ToList()
        With dgvTraitements
            .Columns.Clear()
            .DataSource = maListe
        End With
        FormatDgvTraitements()
    End Sub

  5. #5
    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
    Nickel !
    N'oublie pas de cliquer sur le bouton "Résolu".

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

Discussions similaires

  1. remplir un datagridview avec une collection
    Par landsraad59 dans le forum C#
    Réponses: 7
    Dernier message: 03/06/2015, 20h14
  2. Remplir un DataGridView avec une classe
    Par wissem.ba dans le forum Débuter
    Réponses: 2
    Dernier message: 12/05/2014, 15h43
  3. Remplir un DataGridView avec une classe
    Par wissem.ba dans le forum C#
    Réponses: 1
    Dernier message: 07/05/2014, 18h15
  4. Remplir un Datagridview avec une requête Postgres
    Par robertisaline dans le forum VB.NET
    Réponses: 1
    Dernier message: 02/02/2012, 08h24
  5. remplir un datagridview depuis une classe
    Par thor76160 dans le forum C#
    Réponses: 2
    Dernier message: 03/04/2010, 14h00

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