0

我正在GridView从一个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'

GridView这些在 sql server 中看起来不错,但是在日期之后的 00:00:00 时间添加时呈现。- 从好的方面来说,排序工作正常。

中的列DataTable可以变化,因此这些列是在运行时生成的,我不能使用任何涉及像这样编辑字段的解决方案:

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

我觉得我快到了,但我就是找不到拼图的最后一块。

4

2 回答 2

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上的特定格式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 回答
0

我终于像这样在 RowDataBound 上做到了:stackoverflow.com/questions/4249629/formatting-dynamic-gridview

我确信一定有更好的解决方案,但我找不到。

于 2013-02-08T16:22:32.570 回答