C# DataGridView tri avec Liste Générique en tant que source sous-jacente
Je suis en utilisant un DataGridView Windows Forms pour afficher une liste générique de MyObject
objets.
Tout d'abord, je envelopper cette collection dans un BindingSource
Collection, puis:
dataGridView.DataSource = myBindingSource;
Ce que je veux faire est de permettre à l'utilisateur de trier les colonnes par clickin sur l'en-tête de la colonne représentant un béton de Propriété dans MyObject.
J'ai lu quelques articles que je dois faire le tri avant de liaison. Mais il ne m'aide pas si je veux trier les colonnes en temps réel, dit alors qu'il est déjà lié.
La question est, exactement ce que dois-je faire, si j'ai pu voir le tri des flèches dans DataGridView et j'ai pu trier chaque colonne ?
- Voir stackoverflow.com/questions/3770857/.... C'est aussi simple que
dataGridView.DataSource = new BindingListView<MyObject>(myObjects.ToList())
avec la bibliothèque sourceforge.net/projects/blw.
Vous devez vous connecter pour publier un commentaire.
Code complet pour trier la colonne de datagridview dont la source de données est une Liste générique
Je trouve difficile de croire que la grille ne fournit pas de base de tri de la boîte, pas de code nécessaire. Après tout, c'est assez ridicule d'avoir à gérer un en-tête, cliquez sur événement et appel DataGridView.Trier indiquant la colonne (déterminé par ce qui a été cliqué, suivis par le réseau) et le sens du tri (déterminé par l'actuel état de tri, suivi par la grille).
Pourquoi n'est-il pas tout simplement un SortMode ou un AllowUserToSort propriété qui fait exactement la même chose par défaut?
J'ai lié ma grille sur une Liste et les propriétés que j'ai mappé les colonnes sont tous les types de base comme string, int, DateTime et ainsi de suite. Qui sont tous des IComparable. Alors pourquoi sur la terre, j'ai besoin d'écrire une ligne de code? D'autant que la documentation lit:
MSDN
C'est le Framework 3.0 doc, et je suis ciblage 3.5, mais les "autres versions" se réfèrent toutes les versions de Visual Studio, pas les versions du Framework. Ce qui sur terre se passe ici Microsoft?!?
Une bonne Solution dans cet article "Présentation de la SortableBindingList":
http://www.timvw.be/2007/02/22/presenting-the-sortablebindinglistt/
Ici est une solution plus simple pour trier par colonne à l'aide de la Réflexion et de Linq. dataGridView1 de la source de données est définie à compareList qui est déclarée comme suit:
Ma Solution est: est-ce
Je travaille avec myBindingSource à mon propre, je fais le tri, de regroupement ..que ce soit dans un thread séparé.
Ensuite, j'ai simplement lier le résultat de la DataGridView.
Dans ce but, j'ai placé toutes les colonnes à trier
'Programatically'
(concepteur)Puis-je ajouter manuellement la flèche (CROISSANT /DÉCROISSANT)
par la mise en
dans le code derrière.
Vous pouvez également prendre un coup d'oeil à ce post où vous pouvez obtenir deux liens intéressants pour mettre en œuvre une mesure SortableBindingList:
Trier Datagridview colonnes lorsque la source de données liées à la Liste(De T)
voir cet article
http://msdn.microsoft.com/en-us/library/0868ft3z.aspx
en la lisant, j'ai vu cette "Cette méthode trie le contenu de la DataGridView en comparant les valeurs dans la colonne spécifiée. Par défaut, l'opération de tri va utiliser la méthode de comparaison pour comparer des paires de cellules dans la colonne à l'aide de la DataGridViewCell..::.La valeur de la propriété."
Meilleures Salutations,
iordan
Une autre option pour résoudre le problème de tri avec DataGridView lors de la liaison à la Liste, si vous n'êtes pas affaire avec une énorme quantité de données, alors probablement que vous pouvez essayer de convertir la Liste de DataTable, et puis de lier la résultante DataTable à la BindingSource/DataGridView.
Ce serait le besoin pour une mesure de mise en œuvre de IComparer. Dans mon cas, j'ai été traiter avec une petite liste, mais il y avait plus de champs à afficher. Donc, la mise en œuvre de IComparer signifiait écrire trop de chaudière plaque de code.
Vérifier laconique qui permet de convertir la Liste de DataTable: https://stackoverflow.com/a/34062898/4534493
Si la création de votre propre contrôle de l'utilisateur est préférable, vous pouvez faire un tri personnalisé à l'aide du code ci-dessous:
Vous pouvez ensuite remplacer l'en-tête sur la méthode à appeler votre fonction de tri: