Пример #1
0
        /// <summary>
        /// Creates GridModel for added row
        /// </summary>
        /// <typeparam name="TModel">Wrapper model type</typeparam>
        /// <param name="expression">Grid selector targeted for wrapping</param>
        /// <param name="rows">Added rows</param>
        /// <returns>Wrapper model</returns>
        public BsGridModel <TRow> ToBsGridViewModel(List <TRow> rows)
        {
            var grid = new BsGridModel <TRow>
            {
                Items = rows
            };

            return(grid);
        }
Пример #2
0
        public BsGridHtmlBuilder(string fullName, BsGridModel <TRow> model, ModelMetadata metadata, ViewContext viewContext)
            : base(viewContext)
        {
            this.renderer = new BsGridBaseRenderer <TModel, TRow>(this);

            this.fullName = fullName;
            this.model    = model;
            this.metadata = metadata;

            this.SetColumnsFromModel();
        }
Пример #3
0
        /// <summary>
        /// Creates GridModel for added row
        /// </summary>
        /// <typeparam name="TModel">Wrapper model type</typeparam>
        /// <param name="expression">Grid selector targeted for wrapping</param>
        /// <param name="row">Added row</param>
        /// <returns>Wrapper model</returns>
        public BsGridModel <TRow> ToBsGridViewModel(TRow row)
        {
            var grid = new BsGridModel <TRow>
            {
                Items = new List <TRow>
                {
                    row
                }
            };

            return(grid);
        }
Пример #4
0
 private void SwitchOrderType(BsGridModel <TRow> result)
 {
     foreach (var orderItem in result.BaseSettings.OrderableColumns)
     {
         if (orderItem.Type == BsOrderType.Descending)
         {
             orderItem.Type = BsOrderType.Ascending;
         }
         else if (orderItem.Type == BsOrderType.Ascending)
         {
             orderItem.Type = BsOrderType.Descending;
         }
     }
 }
Пример #5
0
        public BsGridModel <TRow> ToBsGridViewModel(TRow row, bool getDetails)
        {
            if (getDetails)
            {
                this.FillDetails(row);
            }

            var grid = new BsGridModel <TRow>
            {
                Items = new List <TRow> {
                    row
                }
            };

            return(grid);
        }
Пример #6
0
        private void SetResult <TValue>(BsGridModel <TRow> result, IQueryable <TEntity> basicQuery, BsGridBaseRepositorySettings settings, Expression <Func <TEntity, TValue> > uniqueIdSelector)
        {
            var totalRecords = basicQuery.Select(x => false).Count();

            if (totalRecords > 0)
            {
                var pager = new BsPagerModel(totalRecords, this.settings.PageSize, this.settings.Page);

                IEnumerable <TRow> finalQuery = null;

                if (totalRecords > 1)
                {
                    var orderedQuery = this.OrderQuery(basicQuery);

                    if (settings.OrderableColumns.Any(c => c.Type == BsOrderType.Descending))
                    {
                        orderedQuery = orderedQuery.ThenByDescending(uniqueIdSelector);
                    }
                    else
                    {
                        orderedQuery = orderedQuery.ThenBy(uniqueIdSelector);
                    }

                    var pagedQuery = orderedQuery.Skip(pager.PageSize * (pager.CurrentPage - 1)).Take(pager.PageSize);

                    finalQuery = this.MapQuery(pagedQuery);
                }
                else
                {
                    finalQuery = this.MapQuery(basicQuery);
                }

                // get items for current page
                result.Items = finalQuery.ToList();

                //sets pager
                pager.CurrentPageRecords = result.Items.Count();
                result.Pager             = pager;
            }
            else
            {
                result.Items = new List <TRow>();
            }
        }
Пример #7
0
        /// <summary>
        /// Creates GridModel based on Query, OrderQuery and MapQuery
        /// </summary>
        /// <param name="settings">Requested settings</param>
        /// <returns>Grid model</returns>
        public virtual BsGridModel <TRow> ToBsGridViewModel <TValue>(BsGridBaseRepositorySettings settings, Expression <Func <TEntity, TValue> > uniqueIdSelector)
        {
            this.settings = settings;

            var result = new BsGridModel <TRow>();

            //creates basic query
            var basicQuery = this.Query();

            //add column order
            result.BaseSettings.OrderColumns = settings.OrderColumns;

            //add orderable columns
            result.BaseSettings.OrderableColumns = settings.OrderableColumns;

            this.orderedQueryBuilder = new OrderedQueryBuilder <TRow>(this.settings.OrderableColumns);

            if (this.settings.GoTo.HasValue)
            {
                this.SetNoOffsetResult(result, basicQuery, settings, uniqueIdSelector);
            }
            else
            {
                this.SetResult(result, basicQuery, settings, uniqueIdSelector);
            }

            if (settings.DetailsAll || settings.DetailsCount > 0)
            {
                for (var i = 0; i < result.Pager.CurrentPageRecords; i++)
                {
                    if (settings.HasDetails(i))
                    {
                        var row = result.Items.ElementAt(i);
                        this.FillDetails(row);
                    }
                }
            }

            //sets base settings
            result.BaseSettings = this.settings.GetBase();

            return(result);
        }
Пример #8
0
        public BsGridModel <TRow> ToBsGridViewModel <TValue>(List <TRow> rows, Expression <Func <TRow, TValue> > rowExpression, List <BsGridRowData <TValue> > rowsSettings)
        {
            foreach (var row in rows)
            {
                var rowProp       = rowExpression.GetPropertyInfo();
                var rowIdentifier = (TValue)rowProp.GetValue(row);
                if (rowsSettings.Any(x => x.Id.Equals(rowIdentifier) && x.GetDetails))
                {
                    this.FillDetails(row);
                }
            }

            var grid = new BsGridModel <TRow>
            {
                Items = rows
            };

            return(grid);
        }
Пример #9
0
        private void SetNoOffsetResult <TValue>(BsGridModel <TRow> result, IQueryable <TEntity> basicQuery, BsGridBaseRepositorySettings settings, Expression <Func <TEntity, TValue> > uniqueIdSelector)
        {
            var pager = new BsPagerModel
            {
                PageSize = settings.PageSize
            };

            IEnumerable <TRow> finalQuery = new List <TRow>();

            pager.GoTo = settings.GoTo.Value;

            if (settings.GoTo.Value == BsDirectionType.Last)
            {
                this.SwitchOrderType(result);
            }

            var orderedPagerQuery = this.OrderAndPaginate(basicQuery, uniqueIdSelector);

            if (settings.GoTo.Value == BsDirectionType.Last)
            {
                this.SwitchOrderType(result);
            }

            var pagedQuery = this.OrderQuery(orderedPagerQuery.Take(pager.PageSize));

            pagedQuery = this.OrderByUniqueId(pagedQuery, uniqueIdSelector);

            finalQuery = this.MapQuery(pagedQuery);

            result.Items = finalQuery.ToList();

            result.Pager = pager;

            result.Pager.CurrentPageRecords = result.Items.Count();
            result.Pager.TotalRecords       = result.Pager.CurrentPageRecords;
        }
Пример #10
0
        /// <summary>
        /// Helper for wrapping grid
        /// </summary>
        /// <typeparam name="TModel">Wrapper model type</typeparam>
        /// <param name="expression">Grid selector targeted for wrapping</param>
        /// <param name="grid">Grid object</param>
        /// <returns>Wrapper model</returns>
        private static TModel SetGridProperty <TModel>(Expression <Func <TModel, BsGridModel <TRow> > > expression, BsGridModel <TRow> grid) where TModel : new()
        {
            var model    = new TModel();
            var gridProp = expression.GetPropertyInfo();

            gridProp.SetValue(model, grid);
            return(model);
        }
Пример #11
0
        /// <summary>
        /// Creates GridModel based on Query, OrderQuery and MapQuery
        /// </summary>
        /// <param name="settings">Requested settings</param>
        /// <returns>Grid model</returns>
        public virtual BsGridModel <TRow> ToBsGridViewModel(BsGridBaseRepositorySettings settings)
        {
            this.settings = settings;

            var result = new BsGridModel <TRow>();

            //creates basic query
            var basicQuery = this.Query();

            //performs count
            var totalRecords = basicQuery.Select(x => false).Count();

            //add column order
            result.BaseSettings.OrderColumns = settings.OrderColumns;

            //add orderable columns
            result.BaseSettings.OrderableColumns = settings.OrderableColumns;

            if (totalRecords > 0)
            {
                var pager = new BsPagerModel(totalRecords, this.settings.PageSize, this.settings.Page);

                IEnumerable <TRow> finalQuery = null;

                if (totalRecords > 1)
                {
                    this.orderedQueryBuilder = new OrderedQueryBuilder <TRow>(this.settings.OrderableColumns);
                    var orderedQuery = this.OrderQuery(basicQuery);
                    var pagedQuery   = orderedQuery.Skip(pager.PageSize * (pager.CurrentPage - 1)).Take(pager.PageSize);
                    finalQuery = this.MapQuery(pagedQuery);
                }
                else
                {
                    finalQuery = this.MapQuery(basicQuery);
                }

                // get items for current page
                result.Items = finalQuery.ToList();

                //sets pager
                pager.CurrentPageRecords = result.Items.Count();
                result.Pager             = pager;

                if (settings.DetailsAll || settings.DetailsCount > 0)
                {
                    for (var i = 0; i < pager.CurrentPageRecords; i++)
                    {
                        if (settings.HasDetails(i))
                        {
                            var row = result.Items.ElementAt(i);
                            this.FillDetails(row);
                        }
                    }
                }
            }
            else
            {
                result.Items = new List <TRow>();
            }

            //sets base settings
            result.BaseSettings = this.settings.GetBase();

            return(result);
        }