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();
 }
Example #2
0
        /// <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")
                };
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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));
        }
Example #7
0
        /// <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));
        }
Example #8
0
        /// <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));
        }