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 :

Tri de BindingList


Sujet :

C#

  1. #1
    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 Tri de BindingList
    Bonjour

    J'utilise BindingList d'une classe C de trois elements (string,float,float)

    La BindingList n'est pas malheureusement pas directement triable dans un DGV

    Ce que je compte faire c'est :

    1- Definir 3 comparer pour les trois éléments de ma classe C
    2- Definir un tableau de sort direction
    3- Utiliser l'event click sur le header du DGV pour determier le comparer a utiliser pour trier ma liste

    Sur un click
    a) (Je verifie si la colonne est sorted) ? (reverse) : (sort using comparer)


    QUESTION ?

    Est-ce la bonne méthode ?
    D'autres suggestions ??

    Merci de vos conseils

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Hello,

    si tu implémentes l'interface IBindingListView, et que tu renvoies true dans la propriété SupportsSortingCore, tu n'auras rien à faire côté DataGridView.

    Reste à implémenter cette interface cf notamment cet article : http://msdn.microsoft.com/en-us/library/ms993124.aspx

    Le problème est de trier les objets selon l'une de leurs propriétés. La solution la plus simple est de se baser sur la réflexion. En gros, du fait objet1.GetProperty("ID").CompareTo(objet2.GetProperty("ID")) dans ta fonction de comparaison. C'est lent.

    Une autre solution est détaillée ici : http://www.codeproject.com/KB/cs/Dyn...eflection.aspx, et passe par la création dynamique d'une méthode. testé et approuvé

    Mais je sais pas si les dernières versions du framework ne proposent pas mieux. Je trouve malheureux que bien que l'on soit invités à oublier les DataSet / DataTable and co, il n'y a rien qui remplace leurs fonctionnalités...

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    L'autre solution c'est de faire ta propre classe qui hérite de BindingList<T> et de redéfinir la méthode ApplySortCore pour mettre ton tri en place. Avec un peu de recherche Google je suis presque sûr que tu trouveras des exemples voire même du code tout prêt. Le DataGridView se débrouille tout seul ensuite il me semble.

  4. #4
    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
    Hello

    J'ai déja essayé plusieurs fois d'implémenter IBindingList et chaque fois que je pensais etre au bout il y avait un truc qui foirait !

    Particulierement la gestion des AddNew a partir d'un DgV

    Et pour trouver de l'aide : nihil le desert ! a croire que personne n'a jamais fait ca

    Donc a fortiori Implementer IBindinglistView, je suis pas tres chaud d'y aller tout seul !


    Par contre je viens de trouver un truc qui me semble asser clean en tout cas plus simple que plusieurs usines a gaz que j'avais déja appercues


    http://www.martinwilley.com/net/code...ndinglist.html

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Je savais bien que l'on trouverais du code tout fait sur quelque chose d'aussi pratique ^^

  6. #6
    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
    Je viens d'essayer ca marche génial

    Et je suis scié par la propreté et la simplicité de ce code

    A garder sur la cheminée en tout cas !!

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par olibara
    Par contre je viens de trouver un truc qui me semble asser clean en tout cas plus simple que plusieurs usines a gaz que j'avais déja appercues
    Bah en gros c'est comme dans l'article de la MSDN que j'avais cité
    Et j'insiste sur la lenteur du tri : chaque comparaison fait deux appels à _sortProperty.GetValue(lhs); , ce qui est vite redhibitoire.

  8. #8
    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
    Tu a raison Guuhl

    Dans le cas de grande listes, ton alternative est préférable

    Je n'ai pas encore bien analyse mais il me semble que la solution ci-apres utilise ta suggestion de creation de methode dynamique

    http://www.codeproject.com/KB/linq/b..._sortable.aspx

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

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  3. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53
  4. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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