public static void ClearStyles(this Controls.Table table) { foreach (var style in table.Styles) { table.Styles[style.Key] = null; } foreach (var style in table.CellStyles) { table.CellStyles[style.Key] = null; } foreach (var style in table.HeaderStyles) { table.HeaderStyles[style.Key] = null; } foreach (var style in table.RowStyles) { table.RowStyles[style.Key] = null; } }
public Control Render() { if (!_rows.Any()) { return(_empty); } bool[] isEmptyColumn = Enumerable.Repeat(true, _columns.Values.Count(e => !e.Removed)).ToArray(); Table RenderTable(IEnumerable <TableRow> tableRows) { var table = new Table(tableRows); table.ClearStyles(); table.SetClass("entity-grid"); if (_width != null) { table.Styles["width"] = _width; } return(table); } TableCell RenderCell(int index, GridColumn <T> column, Control content, bool isHeader = false) { var cell = new TableCell(isHeader, content); if (!isHeader && isEmptyColumn[index]) { if (content is not EmptySpan && content is not EmptyIcon) { isEmptyColumn[index] = false; } } cell.Styles["white-space"] = "nowrap"; if (column.CellAlignment == CellAlignment.Right) { cell.Styles["text-align"] = "right"; } else if (column.CellAlignment == CellAlignment.Center) { cell.Styles["text-align"] = "center"; } return(cell); } TableCell RenderHeaderCell(int index, GridColumn <T> column, Control content) { var cell = RenderCell(index, column, content, true); cell.HtmlElement.SetAttribute("width", column.Width); return(cell); } TableCell RenderSummaryCell(int index, GridColumn <T> column, Control content) { var cell = RenderCell(index, column, content); cell.SetClass("columntotal"); return(cell); } var columns = _columns.Values.Where(e => !e.Removed && e.CellRenderer != null) .OrderBy(e => e.Order).ToList(); TableRow RenderRow(T e) { bool highlight = _highlightRowPredicate?.Invoke(e) ?? false; var row = new TableRow( columns.Select((f, i) => RenderCell(i, f, f.CellRenderer.Render(f.GetValue(e), f, e))) ); if (highlight) { row.AddClass("highlight"); } _rowAction?.Invoke(e, row); return(row); } var header = new TableRow(columns.Select((e, i) => RenderHeaderCell(i, e, new Literal(e.Label == "_" ? "" : e.Label)))); var rows = _rows.Select(RenderRow); var renderedRows = new[] { header }.Concat(rows).ToArray(); if (columns.Any(e => e.SummaryMethod != null)) { var summary = new TableRow(columns.Select((e, i) => RenderSummaryCell(i, e, e.SummaryMethod != null ? e.CellRenderer.Render(e.SummaryMethod(_rows), e, default(T)) : new Literal("")))); renderedRows = renderedRows.Append(summary).ToArray(); } if (_removeEmptyColumns && isEmptyColumn.Any(e => e)) { var indexes = isEmptyColumn.Select((e, i) => (e, i)).Where(x => x.e).Select(x => x.i).Reverse().ToArray(); foreach (var row in renderedRows) { var _row = row; foreach (var index in indexes) { _row.Cells.RemoveAt(index); } } } return(RenderTable(renderedRows)); }