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>"); }
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); }