为啥 kendo Ui -grid date 排序不正确?

Posted

技术标签:

【中文标题】为啥 kendo Ui -grid date 排序不正确?【英文标题】:Why kendo Ui -grid date is not sorting properly?为什么 kendo Ui -grid date 排序不正确? 【发布时间】:2016-12-18 04:57:17 【问题描述】:

值为 ReinsDepositAmount

**

输出

**

我最近在剑道 UI 网格中存储了一个应用程序日期排序。

在剑道网格中,列名是这样定义的

ReinsDepositDate 的传入值 - 月、日、年格式。 08-23-1991

字段名称为 ReinsDepositDate:


    field: "ReinsDepositDate", type: "date", title: "Due Date",format: "0:M/d/yyyy", width: 100, filterable: 
              cell: 
                   operator: "contains"  
                    
            
,

当对日期进行排序时,它的排序基于第一个值

    1/12/1994 23/1/2015 1992 年 13 月 1 日

表示在上升时我正在获取

    1/12/1994 1992 年 13 月 1 日 23/1/2015

所以我放了模式模型

不过,我得到了相同的结果。

 schema: 
                model: 
                    fields: 
                        ReinsDepositDate:  type: "date",format: "0:dd/MM/yyyy"
                    
                
            ,

我看过很多小提琴演示,这里没有任何效果:

参考: http://fiddle.jshell.net/NqrDS/light/ Kendo grid date column not formatting

设计流程:

设计流程是使用 Angular Http 服务通过 API 从 DB 中获取值,并将响应分配给剑道网格中的数据源。当我使用 JSON 文件进行演示时,它工作正常。但同样的事情在这里适用意味着不工作。所以我去自定义javascript进行排序。列:[$scope.grdPrmiumDepositCol, –

kendo 可排序属性中的自定义 javascript 可以解决问题。 这部分工作正常。

  field: "ReinsDepositDate", format: "0:MM/dd/yyyy",type:"date",  sortable:  compare: function (a, b) 
                           var c = new Date(a.ReinsDepositDate);
                            var d = new Date(b.ReinsDepositDate);
                            return c - d;
                        `

                    ],

我的问题是为什么我这样做,因为剑道被赋予了日期格式,并且当我尝试使用 JSON 文件传输读取的示例演示时,剑道格式可以正常工作。还是一头雾水。

【问题讨论】:

【参考方案1】:

根据提供的信息,尚不清楚排序是在客户端还是在服务器上进行的。

如果排序是由 Kendo UI DataSource 在客户端完成的,那么日期值应该以正确的格式提供,以便 Kendo UI 将它们解析为 JavaScript Date 对象。可以解析多种不同的格式,但dd-MM-yyyy不是其中之一。

这是一个示例,它演示了上述内容。您会注意到未解析日期的空行。

http://dojo.telerik.com/UcEXO/2

一般来说,建议使用公认的标准对日期进行序列化:

https://***.com/a/15952652/3086237

如果在服务器上进行排序,那么 Kendo UI 与问题无关,您应该调试服务器端的实现。

【讨论】:

设计流程是使用angular http服务通过api从db获取值,并将响应分配给剑道网格中的数据源。当我使用 json 文件进行演示时,它工作正常。但是同样的事情在这里应用意味着不起作用。所以我去自定义javascript进行排序。 列:[$scope.grdPrmiumDepositCol, 我也尝试过这种不同的格式,但没有任何效果,因为我认为它仍然作为字符串,排序在客户端。所以我把自定义的javascript field: "ReinsDepositDate", format: "0:MM/dd/yyyy",type:"date", sortable: compare: function (a, b) var c = new Date(a.ReinsDepositDate); var d = new Date(b.ReinsDepositDate); return c - d; ` 是的,您的屏幕截图i.stack.imgur.com/WnR3b.png 清楚地表明日期实际上是 Kendo UI 数据源中的字符串。在解决此问题之前,内置排序无法正常工作。您可以将您的实现与 Kendo UI 站点上的示例和此线程中的示例进行比较。我不认为自定义排序是最好的方法,因为过滤和编辑也会遇到同样的问题。 好的,感谢您的回复。还有一个困惑是它在这个演示中如何作为字符串工作。是否有任何替代方法最适合这里。 [链接]fiddle.jshell.net/NqrDS/light 和 [链接]jsfiddle.net/mackry/rbmaz 这些示例中的日期被 Kendo UI DataSource 成功解析,因此在 Grid 中构造和使用 JavaScript Date 对象。我相信我在上面的回复中已经触及了这个话题【参考方案2】:

您可以尝试从响应中解析日期。

http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-schema.parse

schema: 
    parse: function(response) 
      for (var i = 0; i < response.length; i++) 
        response[i].ReinsDepositDate = kendo.parseDate(response[i].ReinsDepositDate, "dd/MM/yyyy");
      
      return response;
    
  

希望这会有所帮助。

【讨论】:

以上是关于为啥 kendo Ui -grid date 排序不正确?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC Kendo UI Edit Popup Internet Explorer Date Edit Problems

启用服务器过滤、排序、分页会中断 MVC Kendo UI 网格的 SignalR 客户端更新

Kendo UI - 属性更改 MVVM

Kendo UI 工具栏按钮

如何在 Razor 中使用 Kendo UI?

Kendo UI 格式化日期和时间字段