public JsonResult Datatable(DatatableParam param) { var people = _people.All().Include(p => p.Address); var sessionObject = Session.GetDatatableProperties<Person>(param.DatatableId); var parser = new DatatableParser<Person>(people, sessionObject); return parser.Parse(param).ToJson(); }
/// <summary> /// Binds a datatable param object from the binding context /// </summary> /// <param name="controllerContext"> /// The controller context. /// </param> /// <param name="bindingContext"> /// The binding context. /// </param> /// <returns> /// An instance of datatable param /// </returns> /// <exception cref="ArgumentNullException"> /// If the controllerContext or bindingContext is null, this method will fail /// </exception> public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { if (controllerContext == null) { throw new ArgumentNullException("controllerContext", "controllerContext is null."); } if (bindingContext == null) { throw new ArgumentNullException("bindingContext", "bindingContext is null."); } var param = new DatatableParam { DatatableId = bindingContext.GetValue <string>("datatableId"), DisplayStart = bindingContext.GetValue <int>("iDisplayStart"), DisplayLength = bindingContext.GetValue <int>("iDisplayLength"), ColumnsCount = bindingContext.GetValue <int>("iColumns"), GlobalSearch = bindingContext.GetValue <string>("sSearch"), SortingColumnsCount = bindingContext.GetValue <int>("iSortingCols"), Echo = bindingContext.GetValue <string>("sEcho") }; param.Searchable = new bool[param.ColumnsCount]; param.Search = new string[param.ColumnsCount]; param.Regex = new bool[param.ColumnsCount]; param.Sortable = new bool[param.ColumnsCount]; param.DataProperties = new string[param.ColumnsCount]; param.SortingColumns = new int[param.ColumnsCount]; param.SortDirections = new string[param.ColumnsCount]; for (int i = 0; i < param.ColumnsCount; i++) { param.Searchable[i] = bindingContext.GetValue <bool>("bSearchable_" + i); param.Search[i] = bindingContext.GetValue <string>("sSearch_" + i); param.Regex[i] = bindingContext.GetValue <bool>("bRegex_" + i); param.Sortable[i] = bindingContext.GetValue <bool>("bSortable_" + i); param.DataProperties[i] = bindingContext.GetValue <string>("mDataProp_" + i); param.SortingColumns[i] = bindingContext.GetValue <int>("iSortCol_" + i); param.SortDirections[i] = bindingContext.GetValue <string>("sSortDir_" + i); } return(param); }
/// <summary> /// Binds a datatable param object from the binding context /// </summary> /// <param name="controllerContext"> /// The controller context. /// </param> /// <param name="bindingContext"> /// The binding context. /// </param> /// <returns> /// An instance of datatable param /// </returns> /// <exception cref="ArgumentNullException"> /// If the controllerContext or bindingContext is null, this method will fail /// </exception> public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { if (controllerContext == null) { throw new ArgumentNullException("controllerContext", "controllerContext is null."); } if (bindingContext == null) { throw new ArgumentNullException("bindingContext", "bindingContext is null."); } var param = new DatatableParam { DatatableId = bindingContext.GetValue<string>("datatableId"), DisplayStart = bindingContext.GetValue<int>("iDisplayStart"), DisplayLength = bindingContext.GetValue<int>("iDisplayLength"), ColumnsCount = bindingContext.GetValue<int>("iColumns"), GlobalSearch = bindingContext.GetValue<string>("sSearch"), SortingColumnsCount = bindingContext.GetValue<int>("iSortingCols"), Echo = bindingContext.GetValue<string>("sEcho") }; param.Searchable = new bool[param.ColumnsCount]; param.Search = new string[param.ColumnsCount]; param.Regex = new bool[param.ColumnsCount]; param.Sortable = new bool[param.ColumnsCount]; param.DataProperties = new string[param.ColumnsCount]; param.SortingColumns = new int[param.ColumnsCount]; param.SortDirections = new string[param.ColumnsCount]; for (int i = 0; i < param.ColumnsCount; i++) { param.Searchable[i] = bindingContext.GetValue<bool>("bSearchable_" + i); param.Search[i] = bindingContext.GetValue<string>("sSearch_" + i); param.Regex[i] = bindingContext.GetValue<bool>("bRegex_" + i); param.Sortable[i] = bindingContext.GetValue<bool>("bSortable_" + i); param.DataProperties[i] = bindingContext.GetValue<string>("mDataProp_" + i); param.SortingColumns[i] = bindingContext.GetValue<int>("iSortCol_" + i); param.SortDirections[i] = bindingContext.GetValue<string>("sSortDir_" + i); } return param; }
public void SetUp() { _param = new DatatableParam { ColumnsCount = 2, DataProperties = new[] {"Id", "Name"}, DatatableId = "PeopleDatatable", DisplayLength = 10, DisplayStart = 0, Echo = "abc", GlobalRegex = false, GlobalSearch = "", Regex = new[] {false, false}, Search = new string[] {null, null}, Searchable = new[] {false, true}, }; _properties = new IDatatableProperty<Person>[] { new DatatableProperty<Person, string>("Id", person => person.Id), new DatatableProperty<Person, int>("Name", person => person.Name), new DatatableProperty<Person, DateTime>("Birthday", person => person.Birthday, "yyyy-MM-dd") }; }
/// <summary> /// Applies the desired sorting, filtering and pagination logic to the /// data source entities according to the param object and returns a reply /// </summary> /// <param name="param"> /// The parameter containing the sorting, filtering and pagination logic /// </param> /// <returns> /// A parsed collection of entities wrapped in a reply object /// </returns> public DatatableReply Parse(DatatableParam param) { int totalRecords = _entities.Count(); _entities = Sort(param); _entities = FilterGlobal(param); _entities = FilterSpecific(param); int displayRecords = _entities.Count(); _entities = _entities.Skip(param.DisplayStart); _entities = _entities.Take(param.DisplayLength); var projector = new DatatableEntityProjector <TEntity>(_entities); var reply = new DatatableReply { Echo = Convert.ToInt32(param.Echo), Columns = string.Join(",", _properties.Select(p => p.ColumnHeader)), TotalRecords = totalRecords, TotalDisplayRecords = displayRecords, Data = projector.Project(_sessionObject).ToArray() }; return(reply); }
/// <summary> /// Sorts the entities by the desired properties in their proper order /// </summary> /// <param name="param"> /// The param containing the sorting logic /// </param> /// <returns> /// the sorted entities /// </returns> private IQueryable <TEntity> Sort(DatatableParam param) { var sorter = new DatatableSorter <TEntity>(param, _properties); return(sorter.Sort(_entities)); }
/// <summary> /// Applies property-specific filters, if any, to the entities /// </summary> /// <param name="param"> /// The param containing the property filters /// </param> /// <returns> /// the filtered entities /// </returns> private IQueryable <TEntity> FilterSpecific(DatatableParam param) { var filter = new DatatablePropertyFilter <TEntity>(param, _properties); return(filter.Filter(_entities)); }
/// <summary> /// Applies the global filter, if any, to the entities /// </summary> /// <param name="param"> /// The param containing the global filter /// </param> /// <returns> /// the filtered entities /// </returns> private IQueryable <TEntity> FilterGlobal(DatatableParam param) { var filter = new DatatableFilter <TEntity>(param, _properties); return(filter.Filter(_entities)); }