public static GridModel ApplyJqGridFilters <T>(IQueryable <T> model, GridSettings grid, dynamic userdata = null) where T : class { if (grid == null) { grid = new GridSettings(); } //filtering if (grid.IsSearch) { model = model.Where <T>(grid.Where); } //sorting if (string.IsNullOrEmpty(grid.SortColumn)) { grid.SortColumn = "id"; } model = model.OrderBy <T>(grid.SortColumn, grid.SortOrder); //paging if (grid.PageIndex == 0) { grid.PageIndex = 1; } T[] data = null; if (grid.PageSize == 0) { data = model.ToArray(); } else { data = model.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray(); } //count var totalcount = model.Count(); //converting in grid format var gridmodel = new GridModel() { total = (int)Math.Ceiling((double)totalcount / grid.PageSize), page = grid.PageIndex, records = totalcount, rows = data, userdata = userdata }; return(gridmodel); }
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { if (ResponseIsValid(actionExecutedContext.Response)) { GridSettings grid; var qscoll = actionExecutedContext.Request.RequestUri.ParseQueryString(); try { string filters = qscoll["filters"]; if (string.IsNullOrEmpty(filters)) { filters = string.Format("{{\"groupOp\":\"AND\",\"rules\":[{{\"field\":\"{0}\",\"op\":\"{1}\",\"data\":\"{2}\"}}]}}", qscoll["searchField"], qscoll["searchOper"], qscoll["searchString"]); } grid = new GridSettings() { IsSearch = bool.Parse(qscoll["_search"] ?? "false"), PageIndex = int.Parse(qscoll["page"] ?? "1"), PageSize = int.Parse(qscoll["rows"] ?? "25"), SortColumn = qscoll["sidx"] ?? "", SortOrder = qscoll["sord"] ?? "asc", Where = Filter.Create(filters), }; } catch (Exception ex) { throw new HttpResponseException(actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message)); } object responseObject; actionExecutedContext.Response.TryGetContentValue(out responseObject); if (responseObject is IQueryable) { var robj = jqGridHelper.ApplyJqGridFilters(responseObject as IQueryable <object>, grid); actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(HttpStatusCode.OK, robj); } } }