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

Kendo UI Grid(C#)日期列仅按日月排序,如何按完整日期排序?

解决Kendo Grid日期列仅按日月排序的问题

嘿,我来帮你搞定这个日期排序的坑!这种情况通常是因为Grid没把你的CreatedDate识别为日期类型,反而当成字符串来排序——字符串排序只会按字符顺序来,自然就忽略年份了。下面给你几个具体的解决办法:

1. 确保ViewModel的日期字段是DateTime类型

首先检查你的viewmodel类,CreatedDate必须是DateTime(或者DateTimeOffset)类型,绝对不能是字符串:

public class viewmodel
{
    public string Title1 { get; set; }
    public DateTime CreatedDate { get; set; } // 这里必须是DateTime类型,不能用string
}

如果之前是字符串类型,改成DateTime后,数据源返回的是标准日期值,Grid就能自动按完整日期排序了。

2. 在Grid列上明确指定DataType为日期

如果因为业务限制,你不得不以字符串形式传递日期(不推荐,但也能解决),可以在列绑定的时候强制指定DataType为date,告诉Kendo这是日期类型:

c.Bound(m => m.CreatedDate)
  .Title("CreatedDate")
  .Sortable(true)
  .DataType("date"); // 关键就是这一行

3. 确认JSON返回的日期格式正确

如果用的是Ajax数据源,要确保后端返回的日期是标准ISO格式(比如"2024-05-20T14:30:00"),这样Kendo客户端能正确解析成日期对象,而不是字符串。

修改后的完整Grid代码示例

@(Html.Kendo().Grid<viewmodel>()
    .Name("SomeName")
    .Sortable(x => x.Enabled(true))
    .HtmlAttributes(new {style = "border: 1px solid black;"})
    .DataSource(ds => ds
        .Ajax()
        .ServerOperation(false)
        .Read(read => read.Action("someAction", "SomeController"))
    )
    .Events(e => e.DataBound("SomeDatabound"))
    .Columns(c => {
        c.Bound(m => m.Title1).Title("Title1").Width(300).Sortable(true);
        c.Bound(m => m.CreatedDate)
          .Title("CreatedDate")
          .Sortable(true)
          .DataType("date"); // 新增DataType指定
    })
    .Resizable(resize => resize.Columns(true))
)

按照上面的步骤调整后,你的日期列应该就能按完整的年-月-日顺序正确排序了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:57:38