public void Render(RenderingModel model, GridContext gridContext, TextWriter outputStream) { _htmlImageSortAsc = "<span class='glyphicon glyphicon-triangle-top pull-right' />"; _htmlImageSortDsc = "<span class='glyphicon glyphicon-triangle-bottom pull-right' />"; var sbHtml = new StringBuilder(); sbHtml.AppendFormat("<table id='{0}'", model.TableHtmlId); AppendCssAttribute(_defaultTableCss, sbHtml); sbHtml.Append(">"); RenderHeader(model, sbHtml); if (model.Rows.Count > 0) { RenderBody(model, gridContext, sbHtml); } else { sbHtml.Append("<tbody>"); sbHtml.Append("<tr>"); sbHtml.AppendFormat("<td colspan='{0}'>", model.Columns.Count()); sbHtml.Append(model.NoResultsMessage); sbHtml.Append("</td>"); sbHtml.Append("</tr>"); sbHtml.Append("</tbody>"); } sbHtml.AppendLine("</table>"); if (gridContext.GridDefinition.EnableRowSelect) { for(var i = 0; i < model.Rows.Count; i++) { sbHtml.AppendLine(String.Format(CultureInfo.InvariantCulture, "<div id='{0}_{1}' style='display:none;'>{2}</div>", gridContext.GridName, i, model.Rows[i].RowSelectEventParameters)); } } RenderPaging(model, sbHtml); outputStream.Write(sbHtml.ToString()); outputStream.Write(model.ClientDataTransferHtmlBlock); }
private RenderingModel PrepModel(int? totalRecords, List<Row> rows, Models.GridContext gridContext) { RenderingModel model = new RenderingModel(); model.HandlerPath = HtmlUtility.GetHandlerPath(); model.TableHtmlId = HtmlUtility.GetTableHtmlId(gridContext.GridName); PrepColumns(gridContext, model); model.Rows = rows; if (model.Rows.Count == 0) { model.NoResultsMessage = gridContext.GridDefinition.NoResultsMessage; } model.PagingModel = null; if (gridContext.QueryOptions.ItemsPerPage.HasValue) { model.PagingModel = new PagingModel(); int currentPageIndex = gridContext.QueryOptions.PageIndex.Value; model.PagingModel.TotalRecords = totalRecords.Value; model.PagingModel.FirstRecord = (currentPageIndex * gridContext.QueryOptions.ItemsPerPage.Value) + 1; model.PagingModel.LastRecord = (model.PagingModel.FirstRecord + gridContext.QueryOptions.ItemsPerPage.Value) - 1; if (model.PagingModel.LastRecord > model.PagingModel.TotalRecords) { model.PagingModel.LastRecord = model.PagingModel.TotalRecords; } model.PagingModel.CurrentPage = currentPageIndex + 1; var numberOfPagesD = (model.PagingModel.TotalRecords + 0.0) / (gridContext.QueryOptions.ItemsPerPage.Value + 0.0); model.PagingModel.NumberOfPages = (int)Math.Ceiling(numberOfPagesD); for (int i = 1; i <= model.PagingModel.NumberOfPages; i++) { model.PagingModel.PageLinks.Add(i, HtmlUtility.MakeGotoPageLink(gridContext.GridName, i)); } } model.ClientDataTransferHtmlBlock = MVCGrid.Web.MVCGridHtmlGenerator.GenerateClientDataTransferHtml(gridContext); return model; }
public void Render(RenderingModel model, GridContext gridContext, TextWriter outputStream) { HtmlImageSortAsc = String.Format("<img src='{0}/sortup.png' class='pull-right' />", model.HandlerPath); HtmlImageSortDsc = String.Format("<img src='{0}/sortdown.png' class='pull-right' />", model.HandlerPath); HtmlImageSort = String.Format("<img src='{0}/sort.png' class='pull-right' />", model.HandlerPath); string tableCss = gridContext.GridDefinition.GetAdditionalSetting<string>(SettingNameTableClass, DefaultTableCss); StringBuilder sbHtml = new StringBuilder(); sbHtml.AppendFormat("<table id='{0}'", model.TableHtmlId); AppendCssAttribute(tableCss, sbHtml); sbHtml.Append(">"); RenderHeader(model, sbHtml); if (model.Rows.Count > 0) { RenderBody(model, sbHtml); } else { sbHtml.Append("<tbody>"); sbHtml.Append("<tr>"); sbHtml.AppendFormat("<td colspan='{0}'>", model.Columns.Count()); sbHtml.Append(model.NoResultsMessage); sbHtml.Append("</td>"); sbHtml.Append("</tr>"); sbHtml.Append("</tbody>"); } sbHtml.AppendLine("</table>"); RenderPaging(model, sbHtml); outputStream.Write(sbHtml.ToString()); outputStream.Write(model.ClientDataTransferHtmlBlock); }
private void PrepColumns(Models.GridContext gridContext, RenderingModel model) { foreach (var col in gridContext.GetVisibleColumns()) { Column renderingColumn = new Column(); model.Columns.Add(renderingColumn); renderingColumn.Name = col.ColumnName; renderingColumn.HeaderText = col.HeaderText; if (gridContext.GridDefinition.Sorting && col.EnableSorting) { SortDirection linkDirection = SortDirection.Asc; SortDirection iconDirection = SortDirection.Unspecified; if (gridContext.QueryOptions.SortColumnName == col.ColumnName && gridContext.QueryOptions.SortDirection == SortDirection.Asc) { iconDirection = SortDirection.Asc; linkDirection = SortDirection.Dsc; } else if (gridContext.QueryOptions.SortColumnName == col.ColumnName && gridContext.QueryOptions.SortDirection == SortDirection.Dsc) { iconDirection = SortDirection.Dsc; linkDirection = SortDirection.Asc; } else { iconDirection = SortDirection.Unspecified; linkDirection = SortDirection.Dsc; } renderingColumn.Onclick = HtmlUtility.MakeSortLink(gridContext.GridName, col.ColumnName, linkDirection); renderingColumn.SortIconDirection = iconDirection; } } }
private void RenderBody(RenderingModel model, GridContext gridContext, StringBuilder sbHtml) { sbHtml.AppendLine("<tbody>"); var rowIndex = 0; foreach (var row in model.Rows) { sbHtml.Append("<tr"); if (gridContext.GridDefinition.EnableRowSelect) { AppendCssAttribute(String.Join(" ", "row-select", row.CalculatedCssClass), sbHtml); if (!String.IsNullOrEmpty(gridContext.GridDefinition.ClientSideRowSelectFunctionName)) { sbHtml.AppendFormat(" data-row-select-id=\"{0}_{1}\"", gridContext.GridName, rowIndex); sbHtml.AppendFormat(" data-row-select-callback=\"{0}\"", gridContext.GridDefinition.ClientSideRowSelectFunctionName); } } else { AppendCssAttribute(row.CalculatedCssClass, sbHtml); } sbHtml.AppendLine(">"); foreach (var col in model.Columns) { var cell = row.Cells[col.Name]; sbHtml.Append("<td"); AppendCssAttribute(cell.CalculatedCssClass, sbHtml); sbHtml.Append(">"); sbHtml.Append("<span style='display:none;' class='verticalCellLabel'"); if (!String.IsNullOrWhiteSpace(col.Onclick)) { sbHtml.Append(" style='cursor: pointer;'"); sbHtml.AppendFormat(" onclick='{0}'", col.Onclick); } sbHtml.Append(">"); sbHtml.Append(col.HeaderText); if (col.SortIconDirection.HasValue) { switch (col.SortIconDirection) { case SortDirection.Asc: sbHtml.Append("<span class='glyphicon glyphicon-triangle-top'></span>"); break; case SortDirection.Dsc: sbHtml.Append("<span class='glyphicon glyphicon-triangle-bottom'></span>"); break; } } sbHtml.Append("</span>"); sbHtml.Append("<span class='verticalCellContent'>"); sbHtml.Append(cell.HtmlText); sbHtml.Append("</span>"); sbHtml.Append("</td>"); } sbHtml.AppendLine(" </tr>"); rowIndex++; } sbHtml.AppendLine("</tbody>"); }
private void RenderPaging(RenderingModel model, StringBuilder sbHtml) { if (model.PagingModel == null) { return; } PagingModel pagingModel = model.PagingModel; sbHtml.Append("<div class=\"row\">"); sbHtml.Append("<div class=\"col-xs-6\">"); sbHtml.AppendFormat("Showing {0} to {1} of {2} entries", pagingModel.FirstRecord, pagingModel.LastRecord, pagingModel.TotalRecords ); sbHtml.Append("</div>"); sbHtml.Append("<div class=\"col-xs-6\">"); int pageToStart; int pageToEnd; pagingModel.CalculatePageStartAndEnd(5, out pageToStart, out pageToEnd); sbHtml.Append("<ul class='pagination pull-right' style='margin-top: 0;'>"); sbHtml.Append("<li"); if (pageToStart == pagingModel.CurrentPage) { sbHtml.Append(" class='disabled'"); } sbHtml.Append(">"); sbHtml.Append("<a href='#' aria-label='Previous' "); if (pageToStart < pagingModel.CurrentPage) { sbHtml.AppendFormat("onclick='{0}'", pagingModel.PageLinks[pagingModel.CurrentPage - 1]); } else { sbHtml.AppendFormat("onclick='{0}'", "return false;"); } sbHtml.Append(">"); sbHtml.Append("<span class='glyphicon glyphicon-backward' aria-hidden='true'></span></a></li>"); for (int i = pageToStart; i <= pageToEnd; i++) { sbHtml.Append("<li"); if (i == pagingModel.CurrentPage) { sbHtml.Append(" class='active'"); } sbHtml.Append(">"); sbHtml.AppendFormat("<a href='#' onclick='{0}'>{1}</a></li>", pagingModel.PageLinks[i], i); } sbHtml.Append("<li"); if (pageToEnd == pagingModel.CurrentPage) { sbHtml.Append(" class='disabled'"); } sbHtml.Append(">"); sbHtml.Append("<a href='#' aria-label='Next' "); if (pageToEnd > pagingModel.CurrentPage) { sbHtml.AppendFormat("onclick='{0}'", pagingModel.PageLinks[pagingModel.CurrentPage + 1]); } else { sbHtml.AppendFormat("onclick='{0}'", "return false;"); } sbHtml.Append(">"); sbHtml.Append("<span class='glyphicon glyphicon-forward' aria-hidden='true'></span></a></li>"); sbHtml.Append("</ul>"); sbHtml.Append("</div>"); sbHtml.Append("</div>"); }
private void RenderHeader(RenderingModel model, StringBuilder sbHtml) { sbHtml.AppendLine("<thead>"); sbHtml.AppendLine(" <tr>"); foreach (var col in model.Columns) { sbHtml.Append("<th"); if (!String.IsNullOrWhiteSpace(col.Onclick)) { sbHtml.Append(" style='cursor: pointer;'"); sbHtml.AppendFormat(" onclick='{0}'", col.Onclick); } sbHtml.Append(">"); sbHtml.Append(col.HeaderText); if (col.SortIconDirection.HasValue) { switch (col.SortIconDirection) { case SortDirection.Asc: sbHtml.Append(" "); sbHtml.Append(_htmlImageSortAsc); break; case SortDirection.Dsc: sbHtml.Append(" "); sbHtml.Append(_htmlImageSortDsc); break; } } sbHtml.AppendLine("</th>"); } sbHtml.AppendLine(" </tr>"); sbHtml.AppendLine("</thead>"); }