剑道网格日期过滤器不能使用前后

时间:2016-03-31 07:34:49

标签: sorting date filter kendo-ui grid

我正在使用kendo网格来显示数据。当我在指定日期值(等于)的日期字段上过滤时,它可以正常工作。但是当我在过滤器中使用之前或之后的条件时,它会错误地过滤数据。

对日期字段进行排序也不会对其进行正确排序。任何帮助将不胜感激。仅供参考:我使用moment.js格式化dd / mm / yyyy格式的数据。

以下是包含数据的代码段:

$("#testgrid").kendoGrid({
    change:onChange,
    dataSource: {
        data: [
            {"No":"27691","ClientName":"ABC","ExpiryDate":"2015-03-14T00:00:00Z"},
            {"No":"27691","Name":"DEF","ExpiryDate":"2016-03-22T00:00:00Z"},
            {"No":"27691","Name":"ABC","ExpiryDate":"2015-02-28T00:00:00Z"},
            {"No":"27691","Name":"ABC","ExpiryDate":"2011-07-03T00:00:00Z"},
            {"No":"27691","Name":"ABC","ExpiryDate":"2015-07-31T00:00:00Z"},
            {"No":"27691","Name":"ABC","ExpiryDate":null},
            {"No":"27691","Name":"ABC","ExpiryDate":"2012-04-30T00:00:00Z"}
        ],
        schema: {
            model: {
                fields: {
                    No: { type: "string" },
                    ExpiryDate: {
                        type: "date",
                        parse: function(inputdate) {
                            var dtval = moment(inputdate).format('DD/MM/YYYY');

                            if (dtval == "Invalid date")
                                return "";
                            else  return dtval;}
                        },
                        Name: { type: "string" }
                    }
                }
            },
            pageSize: 20
        },
        height: 550,
        selectable: "single row",
        allowCopy: true,
        resizable: true,
        groupable: true,
        sortable: true,
        filterable: {
            mode: 'row',
            extra: false,
            operators: {
                string: {
                    startswith: "Starts with",
                    eq: "Is equal to",
                    neq: "Is not equal to"
                }
            }
        },
        pageable: true,
        columns: [
            { field: "No", title: "Number", filterable: { cell: { showOperators: true, operator: "contains" } } , width: 150 },
                    { field: "Name", title: "Name",  filterable: { cell: { showOperators: true} }, width: 150 },                         
                    { field: "ExpiryDate", title: "Expiry Date",
                      format: "{0:dd/MM/yyyy}",   filterable: {
                                cell: {
                                    template: function (args) {
                                    args.element.kendoDatePicker({
                                    format: "{0:dd/MM/yyyy}"
                                        });
                                    }
                                }}
                    , width: 150 }
                   ]
                });`

2 个答案:

答案 0 :(得分:1)

有趣的是,我一直在努力解决与过滤器领域相关的问题。我无法改变日期的格式......

“ExpiryDate”字段的代码部分有助于解决我的问题!

  

{filterable:{cell:{template:function(args){args.element.kendoDatePicker({format:“{0:dd / MM / yyyy}”}); }   }}

认为为其他人强调这一点可能会有用。

答案 1 :(得分:0)

删除架构中的parse设置可能会解决排序问题。在过滤方面,也许“问题”是您的日期是UTC,但是Kendo会在浏览器的当地时间显示它们,您需要处理时间。

我处于美国中部夏令时(CDT),因此2015-03-14T00:00:00Z在网格中显示为13/03/2015。如果我使用带有13/03/2015的“等于”过滤器,那么我在网格中没有得到任何结果。同样的事情 - 没有结果 - 与14/03/2015。如果我将datepicker模板格式更改为dd/MM/yyyy HH:mm:ss并按等于13/03/2015 19:00:00进行过滤,那么我会按预期获得该条目。

因此,为了使用“等于”,你必须有(a)时间组件和(b)记住本地到UTC的转换。

Kendo Dojo

中的演示