Как обернуть текст заголовка, если мой источник данных - DataTable? - PullRequest
0 голосов
/ 25 октября 2011

У меня есть 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 ]

0 голосов
/ 25 октября 2011

Сделайте что-то вроде этого:

Разметка:

<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/>");
}
0 голосов
/ 25 октября 2011

Вы можете использовать пользовательский класс для достижения этого:

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 является заголовком, установите текст заголовка.Если это элемент, установите текстовые значения.

...