Я пытаюсь использовать Telerik MVC Grid для приложения, которое требует много фильтрации и группировки ... В каждой моей модели есть свойство DateTime для хранения CreationDate. Иногда при отображении сетки пользователю не важно время. Кроме того, мне пришлось использовать ViewModels, чтобы избежать циклических ссылок, так как я использую LINQ.
Проблема возникает при использовании или группировке результатов по дате. Если я использую поле CreationDate в качестве Datetime в моей ViewModel, а затем задаю его в качестве формата в представлении, чтобы отображать только дату, оно сортируется нормально, работает нормально, но при группировании его группируются по целому значению datetime, поэтому ничего не будет сгруппировано , Если я использую CreationDate в качестве строки в ViewModel, то в первый раз она будет отображаться нормально, но выдает ошибку, если прибегнет к файлу или сгруппируется по дате.
Вот код, который у меня есть для этого случая:
ViewModel:
public class CenterViewModel
{
public int Id { get; set; }
public string Name{ get; set; }
public string CityName { get; set; }
public string Phone{ get; set; }
public string CreationDate { get; set; }
public bool Active { get; set; }
}
CONTROLLER:
[GridAction]
public ActionResult AjaxIndex()
{
var model = repository.GetAllRecords()
.Select(o => new CenterViewModel
{
Id = o.Id,
Name = o.Name,
CityName= o.City.Name,
Phone = o.Phone,
CreationDate = o.CreationDate .ToShortDateString(),
Active = o.Active
});
return View(new GridModel
{
Data = model
});
}
public ActionResult Index()
{
return View();
}
ВИД:
@model IEnumerable<CenterViewModel>
@(Html.Telerik().Grid<CenterViewModel>()
.Name("Grid")
.DataKeys(keys =>
{
keys.Add(p => p.Id);
})
.Columns(columns =>
{
columns.Bound(o => o.Name);
columns.Bound(o => o.CityName);
columns.Bound(o => o.Phone);
columns.Bound(o => o.CreationDate).Width(200);
columns.Bound(o => o.Active).Width(100)
.DataBinding(dataBinding => {
dataBinding.Ajax().Select("AjaxIndex", "Centers", null);
})
.Pageable()
.Sortable()
.Groupable()
.Filterable())
Приведенный выше код будет работать только для первой загрузки данных, когда вы прибегаете или группируете по дате, выдается следующее исключение: «Метод 'System.String ToShortDateString ()' не поддерживает перевод в SQL». это имеет смысл, но я думаю, что мое намерение довольно ясно сейчас.
Кто-нибудь знает, как решить эту проблему? Заранее спасибо,