Как отфильтровать сетку Telerik Mvc, привязанную к отформатированному свойству даты и времени

Новичок в Telerik Mvc, поэтому я надеюсь, что здесь не хватает очевидного. Я использую версию 2011.3.1115.340 Telerik Mvc. Сетка привязывается к данным через вызовы 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; }

Когда я использую встроенный фильтр сетки (раскрывающийся список) и ввожу значение даты, которое, как я знаю, существует в источнике данных и может отображаться в сетке, я не получаю никаких результатов - пустая сетка. Я читал сообщения, которые, кажется, указывают на то, что это должно работать как шарм, но, очевидно, не в моем случае. Любая идея, что я делаю неправильно здесь?


person NotSoMuchNo    schedule 10.05.2013    source источник


Ответы (2)


Я предполагаю, что ваше поле даты «Дата изменения» является полем DateTime. Это вызвано тем, что фильтр выбора даты в KendoUI не может сопоставить временную часть ваших значений DateTime. Поскольку ничто точно не соответствует значениям в вашей базе данных, он ничего не возвращает.

Недавно я тоже боролся с этим, и моим лучшим решением было преобразовать поля DateTime в SQL в дату, когда я выбирал поля с помощью своего SPROC. Ваш вариант будет выглядеть примерно так, при условии, что вы используете SQL.

SELECT CAST(ModifiedDate AS date) AS ModifiedDate FROM YourTable

Это решило мою проблему с фильтром, поскольку теперь он возвращал нужные мне строки.

Это выявило для меня еще одну проблему, поскольку теперь все мои значения даты смещались на минус шесть часов, потому что мы размещали наш сайт в Azure. Чтобы решить эту проблему, я последовал именно этому от команды кендо:

Кэндо — использование времени UTC как на стороне клиента, так и на стороне сервера

person jaredbaszler    schedule 21.12.2014

person    schedule
comment
Спасибо, но это была одна из первых вещей, которые я попробовал. Все еще оставляет меня с пустой сеткой при применении фильтра. Как я уже сказал, кажется, что это должно быть просто, но оказывается, что это шоу-стопор. - person NotSoMuchNo; 13.05.2013