0

GridViewaから aを埋めていDataTableます。日時フィールドの日付部分だけを表示したいと思います。

利用した :

CONVERT(VARCHAR(10),MyDatetime,103) AS 'DateOnly'

これは問題なく表示されますが、「間違って」ソートされます(日付ではなく文字列として扱われます)回避したい簡単な解決策は次のとおりです

CONVERT(VARCHAR(10),MyDatetime,102) AS 'DateOnly'

つまり、最初に年があり、これは正しくソートされますが、完全には正しくありません。

私も試しました:

CONVERT(date,MyDatetime,103) AS 'DateOnly' and 
DATEADD(D, 0, DATEDIFF(D, 0, MyDatetime)) AS 'DateOnly'

これらは SQL サーバーでは問題なく表示されますがGridView、日付の 00:00:00 の時間に追加でレンダリングされると。-プラス面では、ソートは正常に機能します。

の列はDataTable異なる可能性があるため、実行時に列が生成されるため、次のようなフィールドの編集を伴うソリューションは使用できません。

<asp:BoundField DataField="DataFieldName" DataFormatString="{0:d}"></asp:BoundField>

もうすぐそこにいるような気がしますが、パズルの最後のピースを見つけることができません.

4

2 に答える 2

0

私はついに次のようにRowDataBoundでそれを行いました:stackoverflow.com/questions/4249629/formatting-dynamic-gridview

もっと良い解決策があるはずですが、見つかりませんでした。

于 2013-02-08T16:22:32.570 に答える
0

あなたの場合convert to varchar and order、あなたは実際にはordering by日付ではなく、varchar string.

日時から時間を取り除くには、日時を日付に変換すると、並べ替えは問題ありません(あなたが言ったように)

CONVERT(date, MyDatetime) AS 'DateOnly'

gridview で日付を (dd-MM-yyyy として) フォーマットするには、以下のようにフォーマット文字列を使用します。この場合、データバインドされたフィールドは日付型である必要があることに注意してください

<asp:BoundField DataField="DataFieldName" DataFormatString="{0:dd-MM-yyyy}">
</asp:BoundField>

または、 MSDNのhereのように特定の形式をsql-server使用して日付をフォーマット使用できますCONVERT

たとえば、以下のように 103 スタイルに変換して、オリジナルで注文できます。MyDatetime

Select col1,col2, convert(varchar,myDateTime,103) as 'DateOnly'
From yourTable
Order by myDateTime
于 2013-02-08T10:27:00.517 に答える