public override void RenderGroupTable(TModel[] items, IGridGroupOptions groupOptions, IPagedList paginationViewModel)
        {
            var isHierarchy = GridModel.HierarchyUrl != null;

            Writer.Write("<div class=\"grid-group-wrap\">");
            Writer.Write("<table class=\"grid-group-table\"><thead>");
            var nextSortOrder = GridModel.Multisort ? (OrderedVisibleColumns.Any(x => x.Value.SortOrder.HasValue)
                                           ? (OrderedVisibleColumns.Where(x => x.Value.SortOrder.HasValue).Max(x => x.Value.SortOrder) + 1) : 0)
                                           : 0;

            if (isHierarchy)
            {
                Writer.Write("<th class=\"hierarchy-cell\"></th>");
            }

            foreach (var column in OrderedVisibleColumns)
            {
                RenderColumnHeader(column.Value, column.Key, nextSortOrder.GetValueOrDefault(0), true);
            }

            if (isHierarchy)
            {
                Writer.Write("<th class=\"hierarchy-cell-right\"></th>");
            }

            Writer.Write("</thead>");
            Writer.Write("<tbody>");
            var alternate = false;

            for (var i = 0; i < items.Length; i++)
            {
                RenderTableRow(items[i], OrderedVisibleColumns, alternate);
                alternate = !alternate;
            }

            if (GridModel.ShowEmptyRowsInGroup)
            {
                for (var i = items.Length; i < GridModel.PageSizeInGroup; i++)
                {
                    RenderTableRow(null, OrderedVisibleColumns, alternate, empty: true);
                    alternate = !alternate;
                }
            }

            if (items.Length == 0)
            {
                Writer.Write("<tr>");
                Writer.Write("<td class=\"empty-grid-row\" colspan=\"{1}\">{0}</td>", GridRenderOptions.EmptyText,
                             OrderedVisibleColumns.Count() + 2);
                Writer.Write("</tr>");
            }
            else
            {
                RenderSummaryRow(items, OrderedVisibleColumns.ToArray());
            }

            Writer.Write("</tbody>");
            Writer.Write("</table>");

            RenderGroupGridState(groupOptions);

            RenderPager(paginationViewModel, GridGroupPageLinkClass, true);

            Writer.Write("</div>");
        }
Ejemplo n.º 2
0
        public virtual IPagedList RenderTableBody(IQueryable <TModel> query)
        {
            Writer.Write("<tbody>");
            IPagedList paginateModel;
            var        sortColumns = OrderedVisibleColumns.Where(x => x.Value.SortDirection.HasValue).Select(x => x.Value).OrderBy(x => x.SortOrder).ToArray();

            if (IsGroupGrid)
            {
                var groupColumns = OrderedVisibleColumns.Where(x => x.Value.GroupKeyProperty != null && x.Value.GroupOrder.HasValue).OrderBy(x => x.Value.GroupOrder).ToArray();

                #region Инициализируем опции для группы

                var groupOptions = new GridGroupOptions
                {
                    GPage    = 1,
                    GroupKey = new Dictionary <string, object>(),
                    GColOpt  = new Dictionary <string, IDictionary <string, object> >()
                };

                foreach (var column in GridModel.Options.ColOpt.Where(x => x.Value.Any(c => c.Key == "so" || c.Key == "sd")))
                {
                    groupOptions.GColOpt[column.Key] = new Dictionary <string, object>();
                    foreach (var colOptions in column.Value)
                    {
                        groupOptions.GColOpt[column.Key][colOptions.Key] = colOptions.Value;
                    }
                }

                #endregion

                var groupQuery = query.GroupBy(groupColumns.ToDictionary(x => x.Value.GroupKeyProperty, x => x.Value.GroupSortDirection));

                var groupQueryCount = groupQuery.ToArray().Count();
                var page            = GridModel.Page == 0 ? 1 : GridModel.Page;
                if (page > (int)Math.Ceiling(((double)groupQueryCount) / GridModel.PageSize))
                {
                    page = 1;
                }
                var numberToSkip = (page - 1) * GridModel.PageSize;
                var items        = groupQuery.Skip(numberToSkip).Take(GridModel.PageSize).ToArray();

                paginateModel = new PagedListModel(page, GridModel.PageSize, groupQueryCount);

                var alternate   = false;
                var columnCount = OrderedVisibleColumns.Count();

                for (var i = 0; i < items.Length; i++)
                {
                    var item = items[i];
                    RenderGroupTableRow(groupColumns, item, alternate, columnCount, groupOptions);
                    alternate = !alternate;
                }

                if (GridModel.ShowEmptyRows)
                {
                    if (GridModel.ShowEmptyRows)
                    {
                        for (var i = items.Length; i < GridModel.PageSize; i++)
                        {
                            RenderGroupTableRow(groupColumns, null, alternate, columnCount, groupOptions, empty: true);
                            alternate = !alternate;
                        }
                    }
                }
                if (items.Length == 0)
                {
                    Writer.Write("<tr>");
                    Writer.Write("<td class=\"empty-grid-row\" colspan=\"{1}\">{0}</td>", GridRenderOptions.EmptyText, OrderedVisibleColumns.Count() + 2);
                    Writer.Write("</tr>");
                }
            }
            else
            {
                query = query.Sort(sortColumns.ToDictionary(x => x.SortProperty, x => x.SortDirection));
                var queryCount = query.Count();
                var page       = GridModel.Page == 0 ? 1 : GridModel.Page;
                if (page > (int)Math.Ceiling(((double)queryCount) / GridModel.PageSize))
                {
                    page = 1;
                }

                var numberToSkip = (page - 1) * GridModel.PageSize;
                var items        = query.Skip(numberToSkip).Take(GridModel.PageSize).ToArray();
                GridModel.PrepareSource(items);

                paginateModel = new PagedListModel(page, GridModel.PageSize, queryCount);
                var alternate = false;

                for (var i = 0; i < items.Length; i++)
                {
                    var item = items[i];
                    RenderTableRow(item, OrderedVisibleColumns, alternate);
                    alternate = !alternate;
                }

                if (GridModel.ShowEmptyRows)
                {
                    for (var i = items.Length; i < GridModel.PageSize; i++)
                    {
                        RenderTableRow(null, OrderedVisibleColumns, alternate, empty: true);
                        alternate = !alternate;
                    }
                }

                if (items.Length == 0)
                {
                    Writer.Write("<tr>");
                    Writer.Write("<td class=\"empty-grid-row\" colspan=\"{1}\">{0}</td>", GridRenderOptions.EmptyText, OrderedVisibleColumns.Count() + 2);
                    Writer.Write("</tr>");
                }
                else
                {
                    RenderSummaryRow(items, OrderedVisibleColumns.ToArray());
                }
            }

            Writer.Write("</tbody>");

            return(paginateModel);
        }