Telerik MVC Grid - Группировка по дате - PullRequest
2 голосов
/ 14 февраля 2012

Я пытаюсь использовать 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». это имеет смысл, но я думаю, что мое намерение довольно ясно сейчас.

Кто-нибудь знает, как решить эту проблему? Заранее спасибо,

1 Ответ

2 голосов
/ 14 февраля 2012

В вашей модели вы можете попробовать использовать дату, которая удаляет элемент времени. Затем в представлении отформатируйте дату.

ViewModel:

public DateTime CreationDate { get; set; }

CONTROLLER:

var model = repository.GetAllRecords()
                .Select(o => new CenterViewModel
                {
                    Id = o.Id,
                    Name = o.Name,
                    CityName= o.City.Name,
                    Phone = o.Phone,
                    CreationDate = new DateTime(o.CreationDate.Year, o.CreationDate.Month, o.CreationDate.Day),
                    Active = o.Active
                });

ВИД:

columns.Bound(o => o.CreationDate).Width(200).Format("{0:MM/dd/yyyy}");
...