public override void RenderColumnHeader(IGridColumn <TModel> column, string key, int nextSortOrder, bool isGroupTableHeader) { var th = new TagBuilder("th"); th.MergeAttributes(column.HeaderAttributes); if (column.SortDirection.HasValue) { th.Attributes["class"] = th.Attributes.ContainsKey("class")? "sorted " + th.Attributes["class"]: "sorted"; } Writer.Write(th.ToString(TagRenderMode.StartTag)); if (column.HeaderRender != null) { var value = column.HeaderRender(HtmlHelper); Writer.Write(value); } else { var isGroupableColumn = (!isGroupTableHeader && column.GroupKeyProperty != null && !column.GroupOrder.HasValue); var groupClass = isGroupableColumn ? GroupHeaderClass : string.Empty; var groupTag = string.Empty; if (isGroupableColumn) { var groupTagBuilder = new TagBuilder("sup"); groupTagBuilder.AddCssClass("grid-group-tag"); groupTagBuilder.SetInnerText("G"); if (!String.IsNullOrEmpty(GridRenderOptions.GroupTagTitle)) { groupTagBuilder.Attributes["title"] = GridRenderOptions.GroupTagTitle; } groupTag = groupTagBuilder.ToString(TagRenderMode.Normal); } Writer.Write("<div class=\"grid-column-wrap {2}\" data-key=\"{0}\" data-title=\"{1}\">", key, column.Title, groupClass); Writer.Write(groupTag); var isSortableColumn = column.SortProperty != null; if (isSortableColumn) { RenderSortableColumnHeader(column, key, nextSortOrder, isGroupTableHeader); } else { Writer.Write("<span class=\"grid-column-title\">{0}</span>", column.Title); } Writer.Write("</div>"); } Writer.Write("</th>"); }