DataGridView-Spalte nach „Zahlen“ sortieren

21/08/2008 - 10:31 von Thomas Eisenmann | Report spam
Hallo alle miteinander,

ich habe ein DataTable mit einer Spalte, 3 Zeilen und mit folgenden Inhalt
erzeugt:
1,0
2,0
11,00

und einem DataGridView als Quelle zugewiesen:

DataGridView1.DataSource = DataTable

Wenn ich jetzt diese Spalte im DataGridView1 aufsteigend sortiere, kommt
folgende Reihenfolge heraus:
1,0
11,00
2,0

Sicherlich logisch, da die 1 vor der 2 kommt. Für mich sich es aber Zahlen
(Millimeter) und keine Zeichen.

Wie kann ich das DataGridView1 einstellen, dass aufsteigend folgende
Reihenfolge erscheint:
1,0
2,0
11,00

Danke im Voraus
Grüße Thomas

P.S. Auch wenn ich das Komma durch einen Punkt ersetze wird es nicht besser.
 

Lesen sie die antworten

#1 Elmar Boye
21/08/2008 - 12:32 | Warnen spam
Hallo Thomas,

Thomas Eisenmann schrieb:
ich habe ein DataTable mit einer Spalte, 3 Zeilen und mit folgenden Inhalt
erzeugt:
1,0
2,0
11,00



welchen Datentyp hat die Spalte - hier vermutlich String.
und einem DataGridView als Quelle zugewiesen:

DataGridView1.DataSource = DataTable

Wenn ich jetzt diese Spalte im DataGridView1 aufsteigend sortiere, kommt
folgende Reihenfolge heraus:



Das DataGridView sortiert nicht selbst, sondern verwendet die
Sortieroptionen der DataView (IBindingList.ApplySort, die wiederum
die Sortierung entsprechend dem Datentyp vornimmt.

Sicherlich logisch, da die 1 vor der 2 kommt. Für mich sich es aber Zahlen
(Millimeter) und keine Zeichen.



Wenn es Zahlen sind, so verwende den entsprechenden Datentyp
in der DataTable (z. B. Single/Double).

Sollten die Daten als Zeichenkette geliefert werden, konvertiere
sie beim Abruf.

Geht das überhaupt nicht (sollte aber normalerweise), kannst Du
eine berechnete Spalte an die DataTable anhàngen. Die sich dann
aber nicht für die Eingabe im Grid eignet:

Dim table As New DataTable("Tabelle")
table.Columns.Add("Wert", GetType(String))

table.Rows.Add("1,0")
table.Rows.Add("2,0")
table.Rows.Add("11,0")
table.Rows.Add("9,87654321")
table.Columns.Add("Wert numerisch", GetType(System.Double), "CONVERT(Wert, 'System.Double')")

Dim view As DataView = New DataView(table, "", "[Wert numerisch] ASC", DataViewRowState.CurrentRows)

For Each row As DataRowView In view
Console.WriteLine("{0} {1}", row(0), row(1))
Next

P.S. Auch wenn ich das Komma durch einen Punkt ersetze wird es nicht besser.



Daten sollte im nativen Format gespeichert, ein Komma oder Punkt wird
dann durch die Anzeige anhand der Kultur des Clients bei der
Ausgabeformatierung ausgewàhlt.

Gruß Elmar

Ähnliche fragen