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 Presentation Foundation Discussion :

Comment binder à un DataGrid une collection d'objets accessible par une clé


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Par défaut Comment binder à un DataGrid une collection d'objets accessible par une clé
    Bonsoir,

    je désirais binder à un DataGrid la collection ObservableCollection<TagPoint>.

    La particularité de TagPoint est que cette classe possède une propriété de type PointAttributes. Il s'agit d'une collection de PointAttribute. Chaque PointAttribute est accessible par une clé.
    Par exemple, le PointAttribute "Description" est disponible en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tagPoint.PointAttributes["descriptor"]
    De même, le PointAttribute "Unité" est disponible en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tagPoint.PointAttributes["engunits"]
    Ainsi, j'aimerais afficher dans mon DataGrid une colonne affichant la description et une colonne affichant l'unité.

    Comment dois-je procéder en xaml pour configurer le binding de ma collection à mon DataGrid ?

    Merci d'avance,
    Zoax

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut observable collection binde à datagrid
    bonjour
    voici un exemple de code
    1/pour la fenetre
    -code xaml
    Code xml : 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
     
     
    <Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    xmlns:local="clr-namespace:WpfAppDataGridCollection"
            Title="WPF datagrid collection" Height="300" Width="500">
        <UniformGrid Columns="2" Rows="2" x:Name="Grid1">
            <UniformGrid.Resources>
                <!--init la collection CollPersonne-->
                <local:CollPersonne x:Key="mesPersonnes" x:Name="COLLPERSO">
                    <local:Personne ID="1" Nom="JEAN" Prenom="Fricotin"/>
                    <local:Personne ID="2" Nom="PAUL" Prenom="Fricotin"/>
                    <local:Personne ID="2" Nom="BIBI" Prenom="JeanNemar"/>
                </local:CollPersonne>
     
            </UniformGrid.Resources>
            <!-- A Winforms DataGridView control-->
            <WindowsFormsHost Height="184" Name="WindowsFormsHost3" Width="470" VerticalAlignment="Center" HorizontalAlignment="Left">
                <wf:DataGridView    x:Name="dataGrid"
                        DataSource="{StaticResource mesPersonnes}"/>
            </WindowsFormsHost>
        </UniformGrid>
    </Window>
    -code cs ou vb
    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
     
     
    'ajouter un reference à :
    '-system.windows.forms
    '-windowsformsintegration
    'ajouter un control winhost sur la forme
    'ajouter dans xaml le nom d'espace necessaire pour les winforms
    '-xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    Imports System
    Imports System.Windows
    'ici imports pour les winforms
    Imports System.Windows.Forms
    Imports System.Media
    Class Window1
     
    End Class
    2/classe personne et collection CollPerso
    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
     
     
    'fichier classe Personne et collection CollPersonne
    Imports System
    Imports System.Collections.ObjectModel
    Public Class CollPersonne
        Inherits ObservableCollection(Of Personne)
    End Class
     
    Public Class Personne
        Private m_ID As Integer
        Private m_Nom As String
        Private m_Prenom As String
        Public Sub New()
     
        End Sub
        Public Property ID() As Integer
            Get
                Return m_ID
            End Get
            Set(ByVal value As Integer)
                m_ID = value
            End Set
        End Property
     
        Public Property Nom() As String
            Get
                Return m_Nom
            End Get
            Set(ByVal value As String)
                m_Nom = value
            End Set
        End Property
     
        Public Property Prenom() As String
            Get
                Return m_Prenom
            End Get
            Set(ByVal value As String)
                m_Prenom = value
            End Set
        End Property
     
    End Class
    bonne annee et bon code.......

  3. #3
    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 : 44
    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
    Par défaut
    @MABROUKI, la solution que tu donnes utilise le DataGridView de WinForms... ce n'est pas vraiment une solution WPF, et ça ne peut pas tirer parti du binding. D'ailleurs ça ne répond pas à la question, qui est de savoir comment binder sur un élément spécifique d'une collection via l'indexeur

    Avec un DataGrid WPF, on peut faire quelque chose comme ça :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <DataGrid ItemsSource="{Binding TagPoints}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Description" Binding="{Binding PointAttributes[descriptor]}" />
            <DataGridTextColumn Header="Unité" Binding="{Binding PointAttributes[engunits]}" />
        </DataGrid.Columns>
    </DataGrid>

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut binding à une sous-collection d'une classe contenu dans une collection
    bonjour,
    je l'avoue j'ai mal compris à propos du datagrid,je n'ais pas de datagrid en wpf sur ma machine.j'ai uniquement le composant datagrid du wpf toolkit.
    a moinsque ce soit sur vs 2010 que je ne possede pas.j'apprends donc.

    Maintenant ta reponse reste une demi-reponse comme la mienne par ce que la question pose par l'auteur du post est plus subtile :
    il veut binder à un DataGrid la collection ObservableCollection<TagPoint>.
    La classe TagPoint contient elle-meme une prop PointAttributes qui est une 2eme collection de PointAttribute.
    Il veut visualiser un element de l'observableCollection<TagPoint> a savoir une classe TagPoint plus les elements de la proprietes PointAttributes(sous collection).
    Il y a la une espece de modele hierarchique visuel à creer.
    bonne annee et bonne soiree....

  5. #5
    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 : 44
    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
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    j'ai uniquement le composant datagrid du wpf toolkit.
    a moinsque ce soit sur vs 2010 que je ne possede pas.j'apprends donc.
    Effectivement le DataGrid du Toolkit a été intégré à WPF en 4.0

    Citation Envoyé par MABROUKI Voir le message
    Il veut visualiser un element de l'observableCollection<TagPoint> a savoir une classe TagPoint plus les elements de la proprietes PointAttributes(sous collection).
    Ce n'est pas ce qu'il dit... il dit seulement qu'il veut afficher 2 des éléments de PointAttributes (description et unité). Pour les autres, ce n'est pas précisé...

    Si le but est d'afficher des colonnes pour chacun des attributs de PointAttributes, c'est un peu plus complexe. Il faut pour cela que la classe implémente ICustomTypeDescriptor, et que la méthode GetProperties renvoie un descripteur pour chaque élément de PointAttributes.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Par défaut
    Bonjour à tous,

    désolé pour la réponse tardive.
    Merci tomlev pour ta réponse, ça marche au poil.
    J'avais essayé en entourant la clé avec \" mais ça ne fonctionnait pas. J'aurais dû essayer sans tout simplement.

    Merci beaucoup,
    Zoax

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2014, 16h44
  2. Réponses: 7
    Dernier message: 21/10/2010, 09h51
  3. Réponses: 0
    Dernier message: 26/10/2009, 15h02
  4. Réponses: 4
    Dernier message: 11/05/2009, 15h59
  5. Comment créer une collection d'objet ?
    Par ced600 dans le forum VBScript
    Réponses: 3
    Dernier message: 11/09/2006, 10h48

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