Wie sortieren Datagrid-Spalte

stimmen
0

Ich habe einen Datagrid, die Daten enthält, die aus einer Datenbank retrived, und das Datagrid zeigt die Daten im gleichen Format wie in der Datenbank.

Eine der Säulen ist die Datefrom die Spalte ist, würde ich sortieren mögen. Dateform in der Datenbank als Varchar gespeichert, daher ist alphabetisch sortiert, zum Beispiel 2/2004, 2/2008, 4/2003. Ich möchte DatFrom konvertieren Datetime auf typ, und die Werte numerisch in der Datagrid vor der Anzeige sortieren.

Gibt es eine Möglichkeit, es zu tun?

Vielen Dank

Aein

Veröffentlicht am 19/05/2009 um 22:09
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
0

Wahrscheinlich die Säule wickeln Sie die IComparable - Schnittstelle zu implementieren , so dass Sie eine benutzerdefinierte Sortierung zur Verfügung stellen kann, ist hier ein Beispiel .

Beantwortet am 19/05/2009 um 22:22
quelle vom benutzer

stimmen
0

Ich glaube , ich verstehe , was Sie fragen hier. Lassen Sie mich wissen , wenn ich weg bin Basis. Ich denke , der einfachste Weg , dies zu beheben , in der select - Anweisung ist Ihre Daten aus der Datenbank zu bekommen, aber es ist vielleicht nicht unbedingt die sein beste Methode. Hier ist , was ich habe kommen mit:

Da Ihr „Datefrom“ ist im Format „MM / yyyy“, werden Sie nicht in der Lage sein, eine gerade CAST () Operation zu tun. Der beste Weg, einen gültigen Datetime-Wert zu bekommen, dass ich mir vorstellen kann, ist die aktuelle Datefrom Spalte zu analysieren und alle Termine zu behandeln, als der erste Tag des Monats, dann können Sie ein Format von „MM / yyyy“ auf der Datagrid-Spalte und es wird immer noch richtig machen. Die CAST () Aussage könnte so etwas wie diese:

SET DATEFORMAT MDY

SELECT CAST(SUBSTRING(DateFrom, 0, CHARINDEX('/',DateFrom))
        + '/1/'
        + SUBSTRING(DateFrom, CHARINDEX('/',DateFrom) +1, 4) AS DATETIME) AS DateFrom

Ich weiß , das ist nicht die eleganteste Methode, aber es soll solange Ihr Datumsformat arbeitet konsistent . Viel Glück!

Beantwortet am 19/05/2009 um 22:23
quelle vom benutzer

stimmen
0

Ich bin nicht sicher, ob ich Ihre Frage verstanden. Trotzdem was sortieren die Zeilen auf der SQL-Seite mit so etwas wie:

SELECT ...
ORDER BY Substring(DateFrom, CHARINDEX('/', DateFrom) + 1, 4) 
         + Lpad(DateFrom, 7, '0');

Es wird die ursprüngliche 2/1999 zu 199902/1999 so ändern, dass sie als Zeichenfolge verglichen werden kann. Der Teil nach dem Schrägstrich ist es nur, weil ich nicht die Zeichenfolge beschneiden wollte, da es nicht nötig ist.

oder

SELECT ...
ORDER BY Cast(int, 
              Substring(DateFrom, CHARINDEX('/', DateFrom) + 1, 4) 
       * 100 
       + Cast(int, 
              Substring(DateFrom, 1, CHARINDEX('/', DateFrom));
Beantwortet am 19/05/2009 um 22:39
quelle vom benutzer

stimmen
1

Ich habe eine kleine Demo-Tabelle (Test). Eingefügt einige Testdaten und hat eine Auswahlabfrage:

Create Table test(dt varchar(10))
Go
Insert Into test(dt)
Select '2/2004'
Union Select '2/2008'
Union Select '4/2003'
Go

Select *
From test
Order By Convert(datetime, '1/' + dt, 103)
Beantwortet am 19/05/2009 um 23:23
quelle vom benutzer

stimmen
0

Danke Jungs. Ich werde das prüfen. Ich habe dieses Projekt für eine Weile fallen zu lassen. Ich lasse Sie wissen, wenn ich es oder nicht bekommen kann zu arbeiten.

Beantwortet am 11/06/2009 um 14:36
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more