Как обернуть текст заголовка, если мой источник данных - DataTable?
У меня есть GridView, источник данных которого динамически создается как DataTable - как я могу указать перенос заголовка для конкретного столбца, учитывая, что я указываю структуру в коде?
Я не нашел ничего, что могло бы справиться с этой конкретной ситуацией, так как мне нужно было обернуть только некоторые столбцы в определенных местах, например, обернуть второй столбец ниже после "Long", но оставить других в покое. Добавление \n
или же <br />
не работают, так как они просто рассматриваются как литералы.
var statsTable = new DataTable();
statsTable.Columns.Add("Run Date", typeof(DateTime));
statsTable.Columns.Add("Needlessly Long Test Header", typeof(string));
...etc
statsTable.Rows.Add(runDate, "example", ...)
gridView.DataSource = statsTable;
gridView.DataBind();
Не уверен, что это актуально, но я обнаружил, что мне нужно сохранить AutoGenerateColumns = true
на моем GridView в противном случае ничего не появляется. Это сбивает меня с толку, так как я думал, что указание столбцов поможет, если это не связано с этим вопросом, я задам другой позже.
Использование.Net 3.5, если это влияет на ответы. Кажется, это была бы простая / распространенная проблема.
2 ответа
Дайте что-то вроде этого:
Разметка:
<asp:TemplateField>
<HeaderTemplate>
<%#HttpUtility.HtmlDecode(InsertBreaks(Eval("DataField")))%>
</HeaderTemplate>
</asp:TemplateField>
С помощью LiteralControl:
<asp:TemplateField>
<HeaderTemplate>
<asp:Literal ID="litHeader" Text='<%#HttpUtility.HtmlDecode(InsertBreaks(Eval("DataField")))%>' Mode="PassThrough"></asp:Literal>
</HeaderTemplate>
</asp:TemplateField>
Код-за:
protected string InsertLineBreaks(string val)
{
return val.Replace("long", "long<br/>").replace("foo", "foo<br/>");
}
Вы можете использовать собственный класс для достижения этого:
class CustomDataRow
{
public string ColumnHeader { get; set; }
public string ColumnName { get; set; }
public string ColumnValue { get; set; }
}
Затем вместо DataTable вы могли бы использовать List для привязки сетки. Затем в событии ItemDataBound вы можете привести DataItem к CustomDataRow. Если e.Item.ItemType является заголовком, установите текст заголовка. Если это элемент, установите текстовые значения.