You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telerik RadGrid日期列未按指定格式渲染且排序异常如何修复

问题描述

我在Telerik Grid中定义了如下日期列:

<Columns>   
<telerik:GridDateTimeColumn  DataField="Boardingdate" DataType="System.DateTime" DataFormatString="{0:MM/dd/yyyy}" SortExpression="Boardingdate" UniqueName="Boardingdate"
    HeaderStyle-Width="10%"/>
</Columns>

SQL查询逻辑中,我通过如下写法获取该日期字段值:

cast(convert(varchar(30),meredsopen,101) as date)

SQL查询结果中该字段显示格式为2010-10-04,但Grid页面渲染后,日期列值显示为8/23/2018 12:00:00 AM,同时该列无法正常排序。
如果将日期值转换为字符串虽然可以实现8/23/2018格式的显示,但这种方式下排序会基于字符串而非date类型执行,该如何修复?

修复方案

按以下步骤排查调整即可:

  • 移除SQL中无意义的日期格式转换:直接返回原生日期类型字段,不要做varchar转来转去的操作,直接查询meredsopen字段即可。SQL层只负责返回正确的日期类型值,不需要做格式化,多余的转换反而可能导致ADO.NET映射字段类型时出现识别偏差。
  • 确认数据源字段类型:绑定到Grid的数据源中,Boardingdate对应的字段类型必须是System.DateTime,不能是字符串类型。如果用DataTable绑定,手动指定对应列的DataType为typeof(DateTime);如果用ORM绑定,确认实体类对应属性为DateTime类型,不要定义成string。
  • 补全列配置,解决格式化不生效问题:给GridDateTimeColumn加上HtmlEncode="false"属性。Telerik Grid默认会对列内容做HTML编码,编码后你配置的DataFormatString会失效,控件会直接调用DateTime的默认ToString()方法输出带时分秒的完整时间格式,这就是页面显示12:00:00 AM的核心原因。修正后的列配置如下:
<telerik:GridDateTimeColumn  
    DataField="Boardingdate" 
    DataType="System.DateTime" 
    DataFormatString="{0:MM/dd/yyyy}"
    HtmlEncode="false"
    SortExpression="Boardingdate" 
    UniqueName="Boardingdate"
    HeaderStyle-Width="10%"/>
  • 排序不需要额外处理:只要控件识别到列绑定的值是DateTime类型,会自动按日期的时间戳大小排序,不会出现字符串排序的逻辑错误。

注意:不要为了格式化效果把日期转成字符串绑定,否则必然出现10/1/2024排在9/1/2024前面的排序异常。

内容的提问来源于stack exchange,提问作者gene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:36:18