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 :

Aller chercher une propriété dans une DataSource [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 44
    Par défaut Aller chercher une propriété dans une DataSource
    Bonjour,

    J'ai créé un DataGridView que j'essaye vainement de lier avec des propriété d'un objet, mais cela ne fonctionne qu'à moitié..

    Pour l'exemple, j'ai crée deux classes:
    La classe principale, celle dont je veux lier les membres aux binding

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Class essai
        Public Property mes As New List(Of mesure)
           Public Class mesure
            Public Property acq As New test
            Public Property temperature As Double = 0
        End Class
    End Class
    et la classe test qui est une classe générale
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Class test
        Public Property un As Double = 0
        Public Property deux As Double = 0
    End Class
    Dans mon DataGridView, je voudrais 3 colonnes, "un", "deux" et "température", je pensais le faire avec la propriété "DataPropertyName"
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       With DataGridView_KAE
                    .AutoGenerateColumns = True
                    .AutoSize = True
                    .DataSource = essai.mes
                End With
    J'ai donc :
    col1.propertyname="temperature", ca marche très bien.
    Par contre ceux-ci ne fonctionnent pas :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    col2.propertyname="acq.un"
    col3.propertyname="acq.deux"
    On dirait qu'on ne peut pas aller à une sous propriété.
    Rien de dispo sur MSDN. Si quelqu'un a une solution...

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Hello,

    On ne peut effectivement pas afficher de "sous propriétés" dans les colonnes d'un datagridview.

    Je rencontre régulièrement ce genre de problématique. La solution que j'ai adoptéE est de créer un wrapper anonyme via une requête Linq et d'affecter ce dernier au datagridview.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 44
    Par défaut
    Merci, je commençais à m'arracher les cheveux en me disant que je n'étais pas doué.

    Comme on arrive à aller chercher une sous-propriété avec les bindings de textbox, je pensais que cela marcherait aussi dans un datagridview, visiblement c'est non.

    J'ai adopté une solution peu élégante, en faisant "remonter" mes sous-propriétés en propriétés simples.

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je te suggère de tester le wrapper anonyme en linq.

    Ca permet de ne pas toucher à la structure de tes objets pour garder ça propre et c'est quand même vachement utile à connaître.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 44
    Par défaut
    Je te suggère de tester le wrapper anonyme en linq.
    Possible de me donner un exemple de code?

    Mon besoin n'est pas si compliqué,il faut que je réussisse à redescendre dans les propriétés de mes mesures pour les afficher dans un datagridview. Ma structure se présente en gros comme ç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
     
     Public Class acq
            Public Property prop1 As Double
            Public Property prop2 As Double
        End Class
     
     Public Class calcul
            Public Property mon_calcul As Double
            Public Property acquisition As acq
     End Class
     
        Public Class essai
            Public Property mesures As New bindinglist(Of calcul)
     End Class
     
        Dim mon_objet As New essai
    Dans mon datagridview dgw, je voudrais réussir à faire quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    dgw.datasource=mon_objet.mesures
     
     Dim col As New DataGridViewColumn
            With col
                .Name = nom
                .DataPropertyName = ".acquisition.prop1"
                .CellTemplate = cell
                .DefaultCellStyle.Format = "N1"
                .ReadOnly = lecture_seule
            End With
    dgw.columns.add(col)

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Hello,

    Quelque chose dans le genre devrait faire l'affaire (sur base des classes que tu donnes et non testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim wrapper = From c As calcul In mesures
                        Select {.Prop1 = c.acquisition.prop1, .Prop2 = c.acquisition.prop2}
     
    dgw.DataSource = wrapper.ToList

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 01/12/2010, 09h26
  2. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 10h43
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2007, 00h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 11h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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