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 :

Binding de propriété définie dans un datagrid [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Binding de propriété définie dans un datagrid
    Bonjour,

    J'exécute une requête Linq sur un EF dans laquelle j'utilise un champ calculé FullName qui est une propriété de ma classe de mon EF
    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
     
    namespace EvoHotels.Manager.DAL
    {
        public partial class Customer
        {
     
            public string FullName
            {
                get
                {
                    return string.Format("{0} {1}", this.Firstname, this.Lastname);
     
                }
            }
        }
    }
    Lorsque j'exécute le code j'ai l'erreur suivante :
    "Le membre de type spécifié « FullName » n'est pas pris en charge dans LINQ to Entities. Seuls les initialiseurs, les membres d'entité et les propriétés de navigation d'entité sont pris en charge."

    Je ne comprends pas trop car ma propriété Fullname que j'utilise dans une autre requete Linq est bien acceptée par ma combobox.

    Code Xaml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <DataGrid Name="dgRoom" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" CanUserAddRows="False"  Margin="6"
              AutoGenerateColumns="False" SelectionMode="Single">
        <!--ItemsSource="{Binding Customers}-->
        <DataGrid.Columns>
            <DataGridTextColumn  Binding="{Binding Path=Name}" Width="*" Header="Room Number" />
            <DataGridTextColumn Binding="{Binding Path=RoomTypeName}"   Width="*" Header="Room Type" />
            <DataGridCheckBoxColumn Binding="{Binding Path=Reservate}"   Width="*" Header="Réservée" />
            <DataGridTextColumn  Binding="{Binding Path=FullName}"   Width="*" Header="Client Name" />
            <DataGridTextColumn  Binding="{Binding Path=ArrivalDate}"   Width="*" Header="Arrival Date" />
            <DataGridTextColumn  Binding="{Binding Path=DepartureDate}"   Width="*" Header="Departure Date" />
        </DataGrid.Columns>
    </DataGrid>
    Requete Linq

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var result = dc.Customers.Join(dc.Orders, c => c.CustomerID, o => o.CustomerID, (c, o) => new { customer = c, order = o })
                             .Join(dc.Rooms, co => co.order.RoomID, r => r.RoomID, (co, r)
                                 => new { co.customer.FullName , co.order.Room.Name, co.order.ArrivalDate, co.order.DepartureDate, Reservation = true, r.RoomTypeID  })
                                 .Where(o => o.Name == selectedRoom.Name)
                                 .OrderBy(o => o.ArrivalDate);
     
    var result2 = result.Join(dc.RoomTypes,r=> r.RoomTypeID , rt=>rt.RoomTypeID, (r,rt)
        => new {r.ArrivalDate ,r.DepartureDate,r.FullName ,r.Name,r. Reservation, RoomTypeName = rt.Name });
     
    dgRoom.ItemsSource = result2.ToList();
    J'aimerais savoir savoir comment je peux utiliser le champ calculé de ma requête Linq Reservation = true pour remplir ma checkbox dont le binding pour l'instant est Reservate car sinon j'ai une erreur : "Une liaison TwoWay ou OneWayToSource ne peut pas fonctionner sur la propriété en lecture seule 'Reservation' de type '<>f__AnonymousType2`6[System.DateTime,System.DateTime,System.String,System.String,System.Boolean,System.String]'."

    Merci d'avance pour votre aide.

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Il y a différents Linq. Linq to object (le linq des collections) accepte tout. Le linq to entities étant traduit en SQL, il ne peut utiliser dans une query que ce qui peut être traduit en SQL. Tu peux crée un champ calculé (pas sur de la traduction française) dans ta db
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 116
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par MoThA Voir le message
    Bonjour,


    J'aimerais savoir savoir comment je peux utiliser le champ calculé de ma requête Linq Reservation = true pour remplir ma checkbox dont le binding pour l'instant est Reservate car sinon j'ai une erreur : "Une liaison TwoWay ou OneWayToSource ne peut pas fonctionner sur la propriété en lecture seule 'Reservation' de type '<>f__AnonymousType2`6[System.DateTime,System.DateTime,System.String,System.String,System.Boolean,System.String]'."

    Merci d'avance pour votre aide.

    Il y a quelque chose qui me chifonne.

    Tu veux éditer une valeur, mais elle est en lecture seule. Ça n'a pas vraiment de sens non?
    Ça veut dire que quelque part, tu défini que ta valeur en base, ou valeur objet est en readOnly. Donc Reservation ne pourra jamais changer de valeur une fois chargée...

    A ne pas confondre avec le readOnly de la colonne en xaml qui empêche de modifier via la colonne en xaml.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Il y a différents Linq. Linq to object (le linq des collections) accepte tout. Le linq to entities étant traduit en SQL, il ne peut utiliser dans une query que ce qui peut être traduit en SQL. Tu peux crée un champ calculé (pas sur de la traduction française) dans ta db
    Mon champ calculé est fait dans la classe de l'EF.
    Donc ca devrait fonctionné parfaitement. Ma requete récupère le lastname, firstname et c'est la classe de l'EF qui calcule le FullName. Pour autant que je ne fais pas de requête Linq sur l'EF en utilisant FullName, je ne devrais pas avoir de soucis.
    De plus ici, je ne fais que remplir une datagrid avec le resultat de ma requete Linq.

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

Discussions similaires

  1. WPF Bind add new item dans une DataGrid
    Par draco951 dans le forum C#
    Réponses: 12
    Dernier message: 05/02/2013, 08h06
  2. [XL-2010] Insérer des propriétés définies dans un classeur
    Par iratihel dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 16/01/2013, 12h28
  3. Changement de propriété d'un Control dans un DataGrid
    Par exopartners dans le forum Silverlight
    Réponses: 2
    Dernier message: 20/04/2010, 17h06
  4. Réponses: 0
    Dernier message: 12/04/2010, 12h08
  5. Réponses: 2
    Dernier message: 21/08/2006, 21h27

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