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

Silverlight Discussion :

Afficher les informations de deux tables dans un datagrid


Sujet :

Silverlight

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Afficher les informations de deux tables dans un datagrid
    Bonjour,

    Dans une appli Silverlight 4 / WCF RIA Services, je souhaiterai afficher dans un même datagrid les informations :

    Produit Prix
    ------- ----
    Produit A Prix A
    Produit B Prix B

    venant des tables Produit et Prix :

    Produit
    -------
    N° produit
    Libellé

    Prix
    ---
    Prix
    Date
    N° produit

    Dans les metadata du domainservice, j'ai mis un Include juste au-dessus de ma table prix (dans l'entité Produit) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Include()>
            Public Property PRIX As EntityCollection(Of PRIX)
    J'ai ajouté une fonction GetProduitAvecPrix dans le domainservice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return Me.ObjectContext.PRODUIT.Include("PRIX")


    Dans ma page, j'ai ajouté un domaindatasource , basé sur ma requête GetProduitAvecPrix et un datagrid avec les trois colonnes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <sdk:DataGridTextColumn x:Name="PRONUMColumn" Binding="{Binding Path=PRONUM, Mode=OneWay}" Header="PRONUM" IsReadOnly="True"  />
    <sdk:DataGridTextColumn x:Name="PRONAMColumn" Binding="{Binding Path=PRONAM}" Header="PRONAM"  />
    <sdk:DataGridTextColumn x:Name="PRIPROPRIColumn" Binding="{Binding Path=PRIX.PRIPROPRI}" Header="PRIPROPRI"  />
    Les infos de la table PRODUIT s'affiche bien mais pas le prix.

    Si quelqu'un a quelques pistes, merci d'avance.

  2. #2
    Membre habitué Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Points : 174
    Points
    174
    Par défaut
    Sans rentrer trop dans le détail, mais pourquoi les produits et les prix se trouvent dans 2 tables séparées ?

    Sinon, petite question, ça donne quoi si tu fais ton binding sur PRIX dans le datagrid ? ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Binding="{Binding Path=PRIX}"
    Sinon regardes pour charger tes données direct dans ton code behind pour voir si tu récupères bien les produits et les prix (en mode debug).

    genre un truc comme ça (en c# désolé...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    using (TOnCOntext cx = new TOnCOntext)
    {
        cx.Load(cx.GetProduitAvecPrix()).Completed += (s, e) =>
            {
                tonDataGrid.ItemsSource = cx.Produits;
            }
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse.

    J'ai simplifié pour exposer mon problème mais, en fait, on garde l'historique des prix des produits. Dans la table des prix on a donc différents prix pour un même produit, avec une date d'effet.

    Le prix est en fait dans le champ PRIPROPRI de la table PRIX, c'est pourquoi j'avais mis PRIX.PRIPROPRI dans le binding. Je ne peux donc pas mettre prix qui ferait référence à la table et pas au champ PRIPROPRI. J'ai essayé de mettre juste PRIPROPRI mais toujours rien.

    Sinon, si j'examine en mode debug ce qui m'est retourné, je vois bien le prix mais pas moyen de l'afficher.

  4. #4
    Membre habitué Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Points : 174
    Points
    174
    Par défaut
    Fais le binding sur Prix et voit si déjà tu affiche l'objet prix dans ta grid ? si ça ne marche pas on verra autrement.

    Prix doit être le nom de ton objet dans le data model Entity framework en plus de ta base, c'est bien le cas ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    En faisant le binding sur PRIX, l'objet PRIX s'affiche dans le datagrid.
    C'est bien le même nom dans le modèle et dans la base.

    Je précise que je débute en Silverlight, toutes les vérifications de base sont donc bonnes à prendre.

  6. #6
    Membre habitué Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Points : 174
    Points
    174
    Par défaut
    PRIPROPRI est de quel type ?

    Si c'est un type particulier, il faut passer par un converter pour transformer PRIPROPRI en un type qui sera compris par le Binding.

    Dans ce cas pour tester, tu crées une nouvelle classe PrixConverter qui implémente l'interface IValueConverter.

    Tu as des exemples ici:
    http://msdn.microsoft.com/fr-fr/libr...=vs.95%29.aspx

    En xaml tu devrais avoir un truc comme ça:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //Déclaration du converter dans les resources (de ton Grid principal par ex.):
    <Grid.Resources>
        <local:PrixConverter x:Key="PRIPROPRIConverter" />
    </Grid.Resources>
     
    //Dans ton datagrid:
    <sdk:DataGridTextColumn x:Name="PRIPROPRIColumn" Binding="{Binding Path=PRIX.PRIPROPRI, Converter={StaticResource PRIPROPRIConverter } " Header="PRIPROPRI"  />

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    PRIPROPRI est de type décimal.
    J'ai essayé un converter mais ca ne change rien.
    Je ne pense pas avoir de problèmes au niveau du converter, j'en avais déjà fait qui fonctionnent.

    Je ne vois vraiment pas ce qui peut se passer ...

  8. #8
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Sinon tu met PRIX, avec un converter, et dans le converter, tu cast l'object en PRIX, et tu récupère la valeur associé, soit PRIOPRI

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci de ton aide lapinpanda.
    Ton idée me plait bien mais je n'arrive pas à faire le cast.

    Dans le converter, j'essaie de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim prix As New PRIX
    prix = DirectCast(value, PRIX)
    Return value.PRIPROPRI
    mais j'ai le message :

    Impossible d'effectuer un cast de l'objet de type 'System.ServiceModel.DomainServices.Client.EntityCollection`1['MonDomaine.PRIX]' en type 'MonDomaine.PRIX'.

  10. #10
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    manifestement le type n'est pas identique, à toi de corriger pour matcher si tu veux poursuivre dans cette voie

Discussions similaires

  1. [MySQL] afficher les donnees de deux tables dans un tableau
    Par labartho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/10/2012, 16h13
  2. Réponses: 5
    Dernier message: 23/04/2007, 13h37
  3. MAJ afficher deux table dans un datagrid
    Par amelhajer dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/04/2007, 07h36
  4. Réponses: 2
    Dernier message: 27/12/2005, 20h09
  5. Réponses: 10
    Dernier message: 19/09/2005, 22h24

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