2009-05-19 15 views
0

私は、データベースから取得したデータを含むデータグリッドを持ち、データグリッドはデータベースと同じ形式でデータを表示します。DataGrid列を並べ替える方法

列の1つは、並べ替える列であるDateFromです。 DateformはVarcharとしてデータベースに格納されているため、アルファベット順にソートされています(たとえば、2/2004、2/2008、4/2003)。私はDatFromをtyp DateTimeに変換し、数値をデータグリッドに表示する前にソートしたいと思います。

これを行う方法はありますか?

おかげ

Aein

+0

どのような種類のデータベースですか? – Andomar

答えて

0

はおそらく、カスタムの並べ替え、here is an exampleを提供できるようにIComparableインターフェイスを実装するために列を折り返します。

0

私はあなたがここで何を求めているのか理解していると思います。私が拠点を外しているかどうか教えてください。私はこれを修正する最も簡単な方法は、データベースからデータを取得するselectステートメントにあると思うが、それは必ずしものベストメソッドではないかもしれない。

"DateFrom"の形式が "MM/yyyy"なので、まっすぐなCAST()操作はできません。私が考えることができる有効なDATETIME値を取得する最善の方法は、現在のDateFrom列を解析し、すべての日付を月の初めとして扱い、DataGrid列に "MM/yyyy"という形式を設定することです、それでも適切にレンダリングされます。

SET DATEFORMAT MDY 

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

私はこれが最もエレガントな方法ではありません知っているが、それは限り、あなたの日付形式が一貫あるとして動作します:CAST()ステートメントは、このようなものである可能性があります。がんばろう!

0

私はあなたの質問を理解しているかわかりません。それは文字列として比較できるように、それは1999分の199902元の1999分の2を変更します

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

:それにもかかわらず、何のようなものでSQL側の行をソートする程度。スラッシュの後の部分は、それが必要でないので文字列を切り抜きたいと思わなかったからです。

または

SELECT ... 
ORDER BY Cast(int, 
       Substring(DateFrom, CHARINDEX('/', DateFrom) + 1, 4) 
     * 100 
     + Cast(int, 
       Substring(DateFrom, 1, CHARINDEX('/', DateFrom)); 
1

私は少しデモテーブル(テスト)を作成しました。いくつかのテストの日付を挿入し、選択クエリをした:

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) 
0

皆さんありがとうございました。私はそれを調べます。このプロジェクトをしばらくは中止しなければならない。私はそれを働かせるかどうかを知らせます。

関連する問題