Comment faire pour Trier les WinForms DataGridView lié à EF EntityCollection<T>
Je suis en train de lier un WinForms DataGridView à un EntityCollection<T>
à partir d'un EntityFramework4 objet. Le problème est que je ne peux pas comprendre comment le faire de tri (automatiquement).
Tout ce que je suis en train de faire est de définir la BindingSource de la propriété DataSource à l'entité de collecte.
MyBindingSource.DataSource = CurrentItem.InvoiceNotes;
J'espère vraiment il y a une configuration simple que je peux ajouter à cela à le faire fonctionner; je ne veux vraiment pas avoir à envelopper mon EF Collection dans une nouvelle BindingList conteneur.
Ne
Il prend en charge IListSource, mais pas BindingList<T>. Est-il quelque chose que je peux faire pour activer le tri, car il met en œuvre IListSource?
EntityCollection<T>
hériter IListSource, ou BindingList<T>? Si pas, alors vous devriez écrire un AutoSort routine appelée par la source de données.Un événement a changé. Il ya des tonnes de routines de tri disponibles sur le Googlenet... 🙂Il prend en charge IListSource, mais pas BindingList<T>. Est-il quelque chose que je peux faire pour activer le tri, car il met en œuvre IListSource?
OriginalL'auteur Adam Rackis | 2011-05-05
Vous devez vous connecter pour publier un commentaire.
À charge le tri, la source doit mettre en œuvre
IBindingList
avec tri activé. Fâcheusement, autant que je sache, la seule intégré type avec c'estDataView
.Tout n'est pas perdu, cependant, votre meilleure option est de créer un
BindingList<T>
de vos données - ou plutôt, l'un des nombreuxBindingList<T>
sous-classes disponibles à titre d'exemples sur internet.BindingList<T>
vous reçoit 90% du chemin, il a juste besoin d'environ 3 (IIRC) d'autres méthodes de mise en œuvre pour obtenir de base (une colonne) de tri de soutien.Dinesh Chandnani écrit une série d'articles en 2005 (http://blogs.msdn.com/b/dchandnani/archive/2005/03.aspx) qui font un bon travail en expliquant liaison via un BindingSource. Il a été écrit avant EF, mais il fournit quelques bonnes informations d'arrière-plan. Voici une curiosité: la
En général, je créer un BindingList<T> accessible par un public de lecture. Note: je ne suis pas habituellement utiliser modifiable datagrid.
OriginalL'auteur Marc Gravell
Ajoutant à @Marc-Gravel réponse, il n'y a une bibliothèque qui permet d'obtenir facilement sortable DGVs pour toute liste, de sorte que vous pouvez l'utiliser et il suffit d'appeler
.ToList()
sur EF collections, IQueryables, IEnumerables, etc. Maintenant, la question est, si vous utilisez.ToList()
et de tri, sera databinding encore du travail? Dans tous mes tests, l' (surprenant, pour moi) la réponse est oui (j'utilise unBindingSource
entre la DGV et les données).Voici un extrait de LINQPad et une capture d'écran de la démo:
(EDIT: la Liaison de la DGV directement à la
BindingListView
(BLV) semble fonctionner de même que l'utilisationBindingSource
entre la DGV et le BLV, de sorte que vous pouvez simplement utiliserdgv.DataSource = efCollection
et toujours plein de liaison de données.)J'ai passé beaucoup de temps à étudier cette question et d'essayer de comprendre pourquoi vous ne pouvez pas trier un EF collection out-of-the-box (ou de toute collecte, d'ailleurs). Voici une compilation de liens vers beaucoup de références utiles à ce sujet:
La liaison de données en général
DGV le tri et la liaison de données en général
EF spécifiques
Maître/Détail (un.k.un. Parent/Enfant) vues
Et si vous voulez la méthode d'extension
.IsDirty()
, ici, il est en VB (doit être dans un Module avec les bonnes instructions Imports):OriginalL'auteur Pat
Merci Andrew Davey, son blog a beaucoup d'autres choses intéressantes.
Ici d'une simple utilisation de BindingListView (BLV) Vb.net qui travaille trop:
OriginalL'auteur Sergio Costa