Permettre à l'utilisateur de trier les colonnes d'une requête LINQ dans un DataGridView
Je ne peux pas tout à fait comment pour permettre un DataGridView peuplée au moment de l'exécution de tri (lorsque les utilisateurs cliquent sur les en-têtes de colonne) où une LINQ de requête XML est à la source de données, par l'intermédiaire d'un BindingSource.
Dim QueryReOrder = From Q In Query _
Where ((0 - Q.Qualifier) / cmbTSStakeValue.Text) <= 0.1 _
Order By Q.Qualifier Descending _
Select Q
Dim bs As New BindingSource
bs.DataSource = QueryReOrder
DGFindMatch.DataSource = bs
Certains de la DataGridView ses propriétés sont:
Sort Nothing String
SortProperty Nothing System.ComponentModel.PropertyDescriptor
SupportsAdvancedSorting False Boolean
SupportsChangeNotification True Boolean
SupportsFiltering False Boolean
SupportsSearching False Boolean
SupportsSorting False Boolean
Est-il une solution simple pour permettre à un utilisateur d'être en mesure de trier ces valeurs en cliquant sur l'en-tête de colonne?
Merci!
OriginalL'auteur user57087 | 2009-01-28
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour obtenir les résultats de la requête LINQ en quelque chose qui supporte la fonctionnalité de tri. Ceci est habituellement fait en dériver une classe à partir de BindingList et la mise en œuvre du Tri à la fonctionnalité de Base dans la classe dérivée.
Il existe de nombreux exemples de mises en œuvre là-bas pour choisir et il est assez simple de mettre en œuvre. Voici un exemple de le faire sur MSDN.
Une fois qu'on a mis en œuvre tout ce que vous avez à faire est de mettre vos résultats et de les utiliser comme votre source de données et la Grille devrait permettre aux utilisateurs de trier en utilisant les colonnes.
OriginalL'auteur Brian ONeil
Par défaut de mon approche consiste à copier le tout dans un DataTable et de lier le DataGridView.
Évidemment, cela ne fonctionne pas bien si vous voulez ajouter la pagination.
OriginalL'auteur Lennaert
Vous avez besoin pour obtenir les résultats de la requête comme AsEnumerable().
Dim QueryReOrder = (À Partir De Q Dans La Requête _
Où ((0 - Q. Qualifier) /cmbTSStakeValue.Texte) <= 0.1 _
Commande Par Q. Qualificatif Décroissant _
Sélectionnez Q).AsEnumerable()
Je dois mentionner que je suis habituellement en C# donc il est possible que vous aurez à faire varier la syntaxe légèrement.
OriginalL'auteur Matthew Talbert
Ya, donc j'ai du mal avec ce pendant un certain temps. Tous les mêmes réponses sur la création d'une coutume générique IBindingList pour chaque classe. C'est fou la quantité de travail à faire si les colonnes de votre grille de points de vue ne sont pas statiques. Je veux être en mesure de changer mon requêtes linq et ne pas avoir à changer ou mettre à jour une classe qui implémente l'personnalisé IBindingList. Donc, voici ce que j'ai fait:
1) Obtenez votre IEnumerable requête.
2) Convertir que IEnumerable ensemble des résultats à un DataTable!
3) Lier votre DataGridView pour que générique DataTable objet.
4). Une fonction d'utilité et vous êtes putain de fait 🙂
Accessoires pour Alberto Poblacion qui a écrit la fonction ci-dessus pour aller d'un IEnumerable à un DataTable: la fonction de thread
c# datagridview sortable linq to ADO.NET
OriginalL'auteur CodeSlinger
Un autre lien que donne un parfait exemple de comment construire une SortableBindingList, comme décrit dans Brian ONeil réponse, peut être trouvé ici:
Sortable Liste Liaison de données personnalisés objets
J'ai pu utiliser cet exemple presque mot pour mot.
OriginalL'auteur Eric
utiliser uniquement MySortableBindingList classe dans cette page La mise en œuvre-un-Triables-BindingList-
puis
var yourLinqList = ...;
MySortableBindingList sortList = new MySortableBindingList(yourLinqList);
dataGridView1.DataSource = sortList;
alors votre dataGridView doit être un peu lorsque la cellule d'en-tête de clic.
OriginalL'auteur Kemal Duran