Windows Forms DatagridView Numerische Spalte Sortieren
Ich benutze nur eine einfache DataGridView zu halten, eine Reihe von Daten (Komisch das).
Habe ich Dezimalzahlen in einer bestimmten Spalte. Aber wenn es um die Bestellung durch das decimal-Spalte, ordnet es falsch. Zum Beispiel :
Ab Reihenfolge könnte sein :
- 0.56
- 3.45
- 500.89
- 20078.90
- 1.56
- 100.29
- 2.39
Ende der Bestellung wäre :
- 0.56
- 100.29
- 1.56
- 20078.90
- 2.39
- 3.45
- 500.89
Wie Sie sehen können, Sie befiehlt ihm, beginnend von der ersten Zahl. Und dann ordnet es auf diese Weise.
Ich dachte, vielleicht könnte ich die Spalte an eine andere "ColumnType" und das können Sie automatisch tun. Aber es gibt keine "Numeric" oder "Decimal-Spalte" Arten.
War ich auf der MSDN-Website suchen die Frage, und die ich finden konnte, die "sort" - Methode, die ich verwenden können, auf das DataGridView. Aber die Erklärung war ein bisschen über meinen Kopf, und die Beispiele, die nicht zahlen, nur text, so konnte ich nicht sehen, wie war ich eigentlich Dinge, bis wechseln.
Jede Hilfe wäre sehr geschätzt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie lösen dies, indem Sie einen handler für die SortCompare Ereignis auf das DataGridView mit dem folgenden code:
Aus der MSDN gibt es diese Beschreibung der SortResult Werte:
Beachten Sie, dass in meinem test-Bett, das nur numerische Spalte war der erste (mit index 0), so dass ist, warum ich den check auf die Spalte index.
Auch, je nach Ihren Anforderungen und Daten, die Sie verfeinern wollen mein code - Beispiel, mein code wird eine exception werfen wenn aus irgendeinem Grund Sie nicht numerische Daten in der Spalte.
Haben Sie wahrscheinlich gesehen, aber hier ist ein link auf die MSDN-Seite auf Anpassung des DataGridView-Sortieren. Wie Sie sagen, dass Sie nur mit text.
Ich hatte das gleiche problem. Ich habe versucht, mit Hilfe der event-handler wie David Hall erwähnt. Verwendet habe ich das ValueType-Eigenschaft bei der Definition des DataGridView. Es sortiert jetzt als Doppel -, keine benutzerdefinierten event-handler-code benötigt
Können Sie auch formatieren Sie die Spalte mit
typeof(double)
im Gegensatz zutypeof(Double)
. Ist eine Klasse und die andere ist eine variable geben. Ich hatte ähnliche Probleme bei der Verwendung der Klasse def Doppelt so gut.Numerischen Typen haben einen eingebauten in der CompareTo-Funktion, die verwendet werden können, wie die SortResult der SortCompare Veranstaltung.
Dies ist natürlich vorausgesetzt, Sie kennen den Typ, wurde in das DataGridView zu beginnen.
Ihre Datenbank-Spalte Datentyp int oder double oder float, nicht varchar oder so....
So ändern Sie Ihren Wert-Typ in der Datenbank...
Sie keine Notwendigkeit, code schreiben oder etwas, das es direkt Sortieren, wenn Sie auf die Kopfzeile der Spalte...
Ist es, Sortieren es durch Zeichen. Sie benötigen, um die Spalte Typ float, so dass es weiß, was Vergleichsoperator angewendet.
(, Die Sie benötigen, um die Spalte Typ in Ihrem dataset schweben, ich glaube, dass es funktionieren wird.)
Dein problem ist die
datagridview
ist die Sortierung von Strings. Versuchen Sie, Gießen Sie diestring
zufloat
beim kopieren auf die Zelle, in derdatagrid
.