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 :

[Entity Framework][BindingSource] Tri dans un datagridview


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 48
    Points : 34
    Points
    34
    Par défaut [Entity Framework][BindingSource] Tri dans un datagridview
    Bonjour à tous,

    Apparemment un datagridview qui est bindée n'a plus la fonctionnalité de Tri ...

    Voila en gros ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    datagridview.datasource = bindingsource1;
     
    bindingsource1.datasource = context.Client;
    Je cherche depuis ce matin une solution pour gérer le tri sur mon bindingsource, sans résultat ...

    Si quelqu'un a aumoins une voie ...

    Merci d'avance.

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut
    Selon moi [Entity Framework] (qu'il repose en paix, je n'y toucherai puls Traite des liste
    Le datagridview ne trie pas une Liste, il faut pour cela utiliser une interface IBindingListe et implementer les methodes de tri toi meme
    A moins qu'il n'existe des astuces de Entity pour cela

    Mais pour ma part apres avoir passé des semaines a subir Entity je gagne actuellement des mois et des jours ne plus l'utiliser ;-))
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    context.Client n'est pas une liste, c'est une requête. Donc le DGV ne peut pas le trier (pour le faire il faudrait qu'il connaisse l'interface IQueryable, qui est apparue bien plus tard)

    La solution est d'utiliser une collection qui implémente IBindingListView pour ajouter les fonctionnalités de tri. Par exemple, la classe AdvancedList<T> de Marc Gravell :
    https://groups.google.com/group/micr...84?hl=en&pli=1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bindingsource1.datasource = new AdvancedList<Client>(context.Client);
    pour pouvoir faire ça il faut modifier un peu la classe AdvancedList en y ajoutant un constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            public AdvancedList(IEnumerable<T> items)
                : base(items.ToList())
            {
            }
    Avec ça le tri devrait fonctionner comme prévu.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    Merci de ta reponse tomlev mais le constructeur me renvoit une erreur :

    Error 11 'System.Collections.Generic.IEnumerable<T>' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'System.Collections.Generic.IEnumerable<T>' could be found (are you missing a using directive or an assembly reference?)

  5. #5
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    A tout hasard, rajoute :
    Ça devrait aller mieux

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    Merci, plus de message d'erreur mais mon datagridview ne tri toujours pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CLIENTBindingSource.DataSource = new AdvancedList<CLIENT>( db.ExecuteStoreQuery<CLIENT>(requete));
    J'ai essayé directement sur le datasource du datagridview mais toujours pas ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    datagridview1.DataSource = new AdvancedList<CLIENT>( db.ExecuteStoreQuery<CLIENT>(requete));

  7. #7
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Bizarre... le SortMode de tes colonnes est bien sur Automatic ?

  8. #8
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Une autre solution serait de trier directement la source de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bindingsource1.datasource = context.Client.OrderBy("it.TonChamp");

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    Autant pour moi, j'avais juste oublier de commenter une tentative de tri manuel dans l'evenement onclick de l'entete de colonne ...

    Merci !

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

Discussions similaires

  1. Tri dans un datagridview
    Par solim dans le forum VB.NET
    Réponses: 4
    Dernier message: 23/09/2010, 14h43
  2. erreur lors d'un tri dans un datagridview
    Par nawake dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/02/2010, 15h40
  3. empecher le tri dans datagridview
    Par thierry007 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/04/2009, 17h08
  4. [C#]ordre de tri inversé dans un datagridview
    Par ClaudeBg dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2009, 17h26
  5. Tri dans un Datagridview
    Par edertef dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/02/2008, 16h29

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