Search code examples
c#asp.net-mvcrazorgridmvcjqgrid

MVCjqGrid. Add date column


I have a grid:

 @(Html.Grid("grid")
      .SetJsonReader(new MvcJqGrid.DataReaders.JsonReader { Id = "Id", RepeatItems = false })
      .SetRequestType(RequestType.Post)
      .AddColumn(new Column("Date").SetWidth(300).SetLabel("Date").)
      .SetUrl(Url.Action("Action", "Controller"))
      .SetRowNum(10)
      .SetHeight(500)
      .SetRowList(new[] { 10, 15, 20, 50 })
      .SetViewRecords(true)
      .SetGridView(true)
      .SetPager("pager")
    )

and data for this grid:

[HttpPost]
public JsonResult Action(GridSettings gridSettings)
{
    var data = new List<DateTime>();
    data.AddRange(Enumerable.Range(0, 1000).Select(s => new
    {
        Date = DateTime.Now.AddHours(s * 4),
    }));
    int totalRecords = data.Count;
    if (!string.IsNullOrWhiteSpace(gridSettings.SortColumn))
    {
        data = (gridSettings.SortOrder == "asc" ?
            data.AsQueryable().OrderByPropertyName(gridSettings.SortColumn) :
            data.AsQueryable().OrderByPropertyNameDescending(gridSettings.SortColumn)).ToArray();
    }
    data = data.Skip((gridSettings.PageIndex - 1) * gridSettings.PageSize).Take(gridSettings.PageSize).ToArray();

    var jsonData = new
    {
        total = totalRecords / gridSettings.PageSize + 1,
        page = gridSettings.PageIndex,
        records = totalRecords,
        rows = data
    };
    return Json(jsonData);
}

So the question how should i work with Dates? if i leave them as DateTime they will display with no format, but with Date = DateTime.Now.AddHours(s * 4).ToString(), will NOT sort correct?


Solution

  • You can format the data after you sorted (I refactored your controller action a little bit to get it to work):

    [HttpPost]
            public JsonResult GetData(GridSettings gridSettings)
            {
                var data = Enumerable.Range(0, 1000).Select(s => DateTime.Now.AddHours(s * 4)).ToList();
    
                var totalRecords = data.Count();
    
                if (!string.IsNullOrWhiteSpace(gridSettings.SortColumn))
                {
                    data = (gridSettings.SortOrder == "asc" ?
                        data.OrderBy(x=>x) :
                        data.OrderByDescending(x=>x)).ToList();
                }
                data = data.Skip((gridSettings.PageIndex - 1) * gridSettings.PageSize).Take(gridSettings.PageSize).ToList();
    
                var id = (gridSettings.PageIndex - 1) * gridSettings.PageSize;
    
                var jsonData = new
                {
                    total = totalRecords / gridSettings.PageSize + 1,
                    page = gridSettings.PageIndex,
                    records = totalRecords,
                    rows = data.Select(d=>new
                        {
                            id = ++id,
                            Date = d.ToShortDateString()
                        })
                };
                return Json(jsonData);
            }