如何过滤绑定到格式化日期时间属性的Telerik Mvc Grid

时间:2013-05-10 17:52:02

标签: telerik telerik-grid telerik-mvc

Telerik Mvc的新手,所以我希望我在这里找不到明显的东西。我使用的是Telerik Mvc版本2011.3.1115.340。网格通过对控制器操作的ajax调用进行数据绑定,然后将列连接到公共属性。关于你可以得到的样板。

Html.Telerik().Grid<ProductResult>()
    .Name("Grid")
    .DataBinding(databinding => databinding.Ajax()
        .Select("GetProductInfo", "Product"))
    .DataKeys(keys => keys.Add(a => a.ProductId))
    .Columns(columns => {
        columns.Bound(a => a.CreateDate).Width(30);
        columns.Bound(a => a.Sales).Width(30);
    columns.Bound(a => a.Service).Width(30);
    columns.Bound(a => a.Training).Width(30);
    columns.Bound(a => a.ModifiedDate).Width(30);
    })
    .Pageable(p => p.PageSize(30))
    .Sortable()
    .Filterable()
    .Groupable()

除日期值外,所有过滤都可以正常工作。绑定类最终从wcf服务传递,其中日期时间值在数据协定中格式化

[DataMember]
[DisplayName("Last Modified Date")]
[DisplayFormat(DataFormatString = "{0:d}")]
public virtual DateTime ModifiedDate { get; set; }

当我使用内置网格过滤器(下拉列表)并输入我知道存在于数据源中的日期值并且可以在网格中看到时,我得不到任何结果 - 空网格。我看过这些帖子似乎表明这应该像魅力一样,但显然不是我的情况。知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:0)

columns.Bound(a => a.ModifiedDate).Format("{0:d}").Width(30);

答案 1 :(得分:0)

我猜你的日期字段“修改日期”是一个DateTime字段。这是因为KendoUI中的datepicker过滤器无法匹配DateTime值的时间部分。由于没有与数据库中的值完全匹配,因此不返回任何内容。

我最近也与此作斗争,我最好的解决方案是在我用SPROC选择字段时将SQL中的DateTime字段转换为日期。你会看起来像这样,假设你正在使用SQL。

SELECT CAST(ModifiedDate AS date) AS ModifiedDate FROM YourTable

这解决了我的过滤器问题,因为它现在返回我想要的行。

这给我带来了另一个问题,因为现在我的日期值都被减去了六个小时,因为我们在Azure上托管我们的网站。为了解决这个问题,我从剑道团队那里得到了正确的答案:

Kendo - Using UTC time on both client and server sides