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

Entity Framework Discussion :

Affichage datagrid d'une requete linq sur EF en offline


Sujet :

Entity Framework

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Affichage datagrid d'une requete linq sur EF en offline
    Bonjour à tous,

    Je veux afficher les entités d'une collection d'entités dans un daragridview sans sauvegarder mes entités dans un contexte.

    Pour plus de détails, voici les données de mon problème:
    1. J'ai les entités suivantes (correspondantes à des tables dans ma base)

    a. Facture:
    1. IDFacture (int, Clé primaire)
    2. Reference (string)
    3. DetailFactures: lien vers les détails de la facture qui représentent l'ensemble des articles inclues dans la dite facture.

    b. DetailFacture:
    1. IDDetailFacture (int, clé primaire)
    2. Designation (string, nom du produit vendu)
    3. Quantite (int, quantité vendue du produit)
    4. IDFacture (int, clé étrangère)

    j'ai bien sur omis de citer tous les champs des entités (juste le nécessaire pour comprendre).

    j'ai aussi créé le bout de code suivant

    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
     
                Facture facture = new Facture();
     
                facture.IDFacture = 4;
                facture.Client = entities.Clients.First();
                facture.Employe = entities.Employes.First();
                facture.ModePayement = entities.ModePayements.First();
                facture.Payee = true;
                facture.Reference = "sur";
                facture.TypeFacture = entities.TypeFactures.First();
                entities.AddToFactures(facture);
                //entities.SaveChanges();
     
                DetailFacture detail = new DetailFacture();
                detail.Produit = entities.Produits.First();
               // detail.Facture = entities.Factures.Last();
                detail.IDDetailFacture = 3;
                detail.NumOrdre = 2;
                detail.PU = 1000;
                facture.DetailFactures.Add(detail);
     
                var result = from detailFact in facture.DetailFactures
                             select new 
                             {
                                 NumOrdre = detail.NumOrdre,
                                 Designation = detail.Produit.Designation
                             };
     
     
                dataGridView1.DataSource = result;
    comme on peut le remarquer, j'ai executé une requête en linq pour afficher les detailFacture que j'ai rajouté sans pour autant sauvegarder le contexte.

    Quand j'execute le code les entités sont créées, la requete me renvoi le résultat que je voulais (dans result) mais la datagridview n'affiche rien.

    j'ai essayé une autre chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var result = from DFact in entities.DetailFactures
                             select DFact;
    où entities est mon Contexte. Ca fonctionne, la gridview affiche.


    Ma question donc est :

    Comment afficher le résultat de ma requête linq sur les entités sans pour autant passer par le contexte (les entités ajoutées ne sont visibles dans le contexte qu'après un entites.SaveChanges())?

    j’espère avoir été clair dans mon énoncée

    Merci d'avance.

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Vos deux sources sont différentes? quel est le code de votre gridview?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Comment afficher le résultat de ma requête linq sur les entités sans pour autant passer par le contexte (les entités ajoutées ne sont visibles dans le contexte qu'après un entites.SaveChanges())?
    Non, le savechanges() ne fait que répercuter en base de données les modifications que vous avez effectués sur vos objets...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Probleme reglé
    Merci pour l'interet que tu portes a mon post.

    Au fait j'ai trouvé la solution à mon problème (j'était trop occupé pour poster).

    Pour répondre à tes questions:
    Vos deux sources sont différentes?
    : mes contextes de données ne sont pas différents ... Oui au fait j'avais eu les problèmes qui sont causé par des entités non attachées au meme contexte de donnée .

    quel est le code de votre gridview?
    : Le code de ma grid ... et bien c'est l'affectation du resultat de la requete linq (au fait j'ai découvert aussi par la suite que la bonne pratique est de mettre un ToList()).

    Non, le savechanges() ne fait que répercuter en base de données les modifications que vous avez effectués sur vos objets...
    tout à fait oui... et entre autres, il met à jour aussi le contexte de données en changeant les status des collections d'entités.

    Au fait j'ai trouvé aussi la façon avec laquelle on peut afficher les entités qui ne sont pas encore commitées dans la base de données (donc avant le savechanges()).

    J'ai travaillé sur le gestionnaire de status de L'EF. le bout de code suivant donne l'idée de base:

    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
     
    IEnumerable<ObjectStateEntry> list = entities.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Where(entry => entry.Entity is DetailFacture);
                    //créer une liste de ces détails
                    var detailslist = from l in list
                                      select (l.Entity as DetailFacture);
     
                    var ToDisplayResult = from detail in detailslist
                                          select new
                                          {
                                              IDFacture = detail.IDFacture,
                                              IDProduit = detail.IDProduit,
                                              NumOrdre = detail.NumOrdre,
                                              Designation = detail.Produit.Designation,
                                              Quantite = detail.Quantite,
                                              PU = detail.PU,
                                              TotalHT = detail.TotalHT,
                                              TotalTVA = detail.TotalTVA,
                                              TotalTTC = detail.TotalTTC
                                          };
    enfin voici voila ... j'ai aussi changé beaucoup d'autres choses, à cause des accès concurrentiels, qui m'ont fait abandonné cette idée. Cela reste quand même bon à savoir.

    Merci quand même pour ton intérêt.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/04/2015, 17h30
  2. impossible d'afficher le resultat d'une requete "Linq to" dans un datagrid
    Par zouuc dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 19/10/2010, 15h44
  3. Réponses: 3
    Dernier message: 05/11/2008, 10h24
  4. [Tableaux] affichage d'une requete SQL sur 2 colonnes
    Par tondeuz dans le forum Langage
    Réponses: 5
    Dernier message: 01/06/2007, 15h47
  5. Réponses: 16
    Dernier message: 27/10/2006, 16h12

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