Benutzer zulassen, um Spalten zu Sortieren, die aus einer LINQ-Abfrage in eine DataGridView
Kann ich nicht so Recht klappen, wie ein DataGridView während der Laufzeit aufgefüllt, zu Sortieren (wenn Benutzer klicken Sie auf die Spaltenköpfe), wo eine LINQ aus der XML-Abfrage ist die DataSource über 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
Einige der DataGridView Eigenschaften sind:
Sort Nothing String
SortProperty Nothing System.ComponentModel.PropertyDescriptor
SupportsAdvancedSorting False Boolean
SupportsChangeNotification True Boolean
SupportsFiltering False Boolean
SupportsSearching False Boolean
SupportsSorting False Boolean
Gibt es eine einfache Lösung, die dem Benutzer ermöglichen zu können, Sortieren Sie diese Werte durch klicken auf die Spaltenüberschrift?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie das Ergebnis der LINQ-Abfrage in etwas unterstützt die Sortierung Funktionalität. Dies erfolgt in der Regel durch ableiten einer Klasse von BindingList und Durchführung der Sortierung-Core-Funktionalität in der abgeleiteten Klasse.
Gibt es viele Beispiele von Implementierungen gibt, um von zu wählen und es ist ein ziemlich geradlinig, was zu implementieren ist. Hier ist ein Beispiel , es zu tun auf der MSDN-Website.
Sobald Sie diese implementiert alle Sie tun müssen ist, setzen Sie Ihre Ergebnisse in es und verwenden Sie es als Ihre Datenquelle und das Gitter sollte es den Benutzern ermöglichen das Sortieren mit den Spalten.
Mein Standard-Ansatz ist, zu kopieren und alles in eine DataTable und binden das DataGridView zu.
Offensichtlich, dass nicht gut arbeiten, wenn Sie möchten hinzufügen von paging.
Die Sie brauchen, um die Ergebnisse der Abfrage als AsEnumerable().
Dim QueryReOrder = (Aus Q In Query _
Where ((0 - f: Qualifier) /cmbTSStakeValue.Text) <= 0.1 _
Order By Q. Qualifier Absteigender _
Wählen Sie Q).AsEnumerable()
Sollte ich erwähnen, ich bin in der Regel in C# so ist es möglich, Sie haben für sich die syntax leicht.
Ya, also ich kämpfte mit diesem für eine Weile. Alle die gleichen Antworten zum erstellen einer benutzerdefinierten generischen IBindingList für jede Klasse. Das ist eine verrückte Menge Arbeit zu tun, wenn die Spalten in der grid-Ansicht sind nicht statisch. Ich möchte in der Lage sein, zu ändern, meine linq-Abfragen und nicht ändern, oder aktualisieren Sie eine Klasse, die die benutzerdefinierte IBindingList. So, hier ist was ich getan habe:
1) Holen Sie sich Ihr IEnumerable Abfrage.
2) zu Konvertieren, dass IEnumerable ResultSet in eine DataTable!
3) Binden Sie Ihre DataGridView zu, dass generic DataTable Objekt.
4) Das ist es. Eine utility-Funktion und Sie sind friggin' fertig 🙂
Requisiten zu Alberto Poblacion die das oben geschrieben Funktion, um zu gehen von einem IEnumerable zu einer DataTable: Funktion thread
c# datagridview-Sortieren mit linq to ADO.NET
Einen anderen link gibt, der ein vollständiges Beispiel zu konstruieren, ein SortableBindingList, wie beschrieben in Brian ONeil Antwort, kann hier gefunden werden:
Sortierbare Verbindliche Liste für benutzerdefinierte Daten-Objekte
Konnte ich dieses Beispiel verwenden fast wortwörtlich.
verwenden Sie nur MySortableBindingList Klasse auf dieser Seite Die Umsetzung-ein Sortierbar-BindingList-
dann
var yourLinqList = ...;
MySortableBindingList sortList = new MySortableBindingList(yourLinqList);
dataGridView1.DataSource = sortList;
dann ist dein dataGridView muss Sortieren wenn Zelle header klicken.