2009-04-20 5 views
2

Wenn ich zwei Saiten habe, und ich brauche sie in ASCII vergleichen (anstelle der invarianten Kultur Reihenfolge) Ich kann in der Regel verwenden:Datatable Spalte sortiert in ASCII-Reihenfolge, nicht

int c = String.Compare(a, b, StringComparison.Ordinal); 

Wenn ich eine habe DataTable, und ich möchte eine der Spalten sortiert mit einem Ordinal String Vergleich für die DataView, wie gehe ich darüber?

Antwort

1

Leider ist nichts eingebaut, um benutzerdefinierte Sortierlogik im DataView zu erleichtern; Das war eine meiner Hauptbeschwerden und einer der Gründe, warum wir uns entschieden haben, bei meinem alten Job eine eigene Datenzugriffsschicht zu erstellen.

Während ich nicht weiß, wie machbar dies wäre für Sie zu tun, um dies wirklich zu erreichen, müssten Sie eine andere Spalte zu Ihrer Tabelle als ein int hinzufügen, dann sortieren Sie die Zeilen in einem Array nach Ihren eigenen Vergleichslogik, dann speichern Sie den Index im Array in Ihrer int Spalte. Dann, anstatt durch die string Spaltenreihenfolge durch die int Spalte zu bestellen.

Ich erkenne jedoch, dass dies Dinge wie die automatische Sortierung, die durch eine GridView erledigt wird, nicht berücksichtigt und Änderungen an den Daten, die nach der Berechnung der Sortierpositionen stattfinden, nicht berücksichtigt. Leider glaube ich nicht, dass da wirklich etwas helfen kann.

Wenn Sie dieses Bild visuell sortieren möchten, überprüfen Sie, ob Ihr visuelles Steuerelement einen benutzerdefinierten Sortiermechanismus unterstützt. Das ist alles, was ich vorschlagen kann.

0

Wenn möglich, wenn Sie die DataTable mit einer Abfrage zu erstellen, müssen die Abfrage, die Spalte in eine numerische Spalte konvertieren:

SELECT *, CAST(your_column AS int) AS your_column_int 
FROM your_table 
ORDER BY your_column_int