0

データ ソースが DataTable として動的に構築される GridView があります。コードで構造を指定していることを考慮して、列固有のヘッダー ラッピングを指定するにはどうすればよいですか?

特定の場所でいくつかの列のみをラップする必要があるため、この特定の状況に対処するものは何も見つかりませんでした。リテラルとして扱われるだけなので、追加または機能しません。\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 を使用します。単純/一般的な問題のようです。

4

2 に答える 2

0

カスタムクラスを使用してそれを実現できます:

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 がヘッダーの場合、ヘッダー テキストを設定します。アイテムの場合は、テキスト値を設定します。

于 2011-10-25T16:10:08.543 に答える
0

このようなものを試してみてください:

マークアップ:

<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/>");
}
于 2011-10-25T16:52:39.470 に答える