我正在从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'
这些在sql server中看起来很好,但是在日期之后的00:00:00时在GridView
添加时进行渲染。 - 从正面看,排序工作正常。
DataTable
中的列可能会有所不同,因此列会在运行时生成,我无法使用任何涉及编辑字段的解决方案:
<asp:BoundField DataField="DataFieldName" DataFormatString="{0:d}"></asp:BoundField>
我觉得我差不多就在那里,但我无法找到拼图的最后一块。
答案 0 :(得分: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>
或 您可以使用sql-server
使用CONVERT
将日期格式化为特定格式,如MSDN
例如,您可以转换为103样式和订单原始MyDatetime
,如下所示
Select col1,col2, convert(varchar,myDateTime,103) as 'DateOnly'
From yourTable
Order by myDateTime
答案 1 :(得分:0)
我终于在RowDataBound上做了这样的事情:stackoverflow.com/questions/4249629/formatting-dynamic-gridview
我确信必须有更好的解决方案,但我找不到它。