.NET TIPS

[ASP.NET]DataGridコントロールの列に複数の項目を表示するには?

デジタルアドバンテージ
2003/11/21

 DataGridコントロールでは、連結列で記述された列には1つの項目しか表示できないが、テンプレート列を用いることにより、複数の項目を1つの列内に表示することができる。

 次の画面は、今回作成するサンプル・プログラムの実行画面である。このサンプル・プログラムでは、1つの列に2つの項目(「概要」と「URL」)を罫線で区切って表示している。

1つの列に複数の項目を表示するサンプル・プログラム(multirow.aspx)の実行画面

 このサンプル・プログラムは「TIPS:[ASP.NET]DataGridコントロールで特定のカラムのみを表示するには?」の示したサンプル・プログラム(bounddg2.aspx)の一部を書き換えたものだ。元のプログラムでは、例えば次のような連結列の記述により列を定義していた。

<asp:BoundColumn DataField="encoded" HeaderText="概要" />

 この列ではデータソースのencodedフィールドのデータを項目として表示するが、ここで指定可能なDataField属性は1つのみだ。

 同じ列にlinkフィールドのデータも表示したい場合には、次のようにテンプレート列を使用する。

  <asp:TemplateColumn HeaderText="概要<hr>URL">
    <ItemTemplate>
      <%# DataBinder.Eval(Container.DataItem, "encoded") %>
      <hr>
      <%# DataBinder.Eval(Container.DataItem, "link") %>
    </ItemTemplate>
  </asp:TemplateColumn>

 テンプレート列の基本的な記述方法については「TIPS:[ASP.NET]DataGridコントロールの行に通し番号を付けるには?」で解説している。ここでは、1つの<ItemTemplate>要素に2つのデータ連結式を埋め込み、それらを罫線表示のための<hr>タグで区切っているところがポイントだ。また、列名表示に使用されるHeaderText属性の値にも<hr>タグを埋め込んで、ヘッダー行も同じように複数行表示にしている。

 サンプル・プログラムのソース・コードを次に示しておく。

<%@ Page Language="C#" EnableViewState="false" %>
<%@ Import Namespace="System.Data" %>

<html>
<head>
  <script runat="server">
    void Page_Load(object sender, EventArgs e) {
      DataSet ds = new DataSet();
      ds.ReadXml("http://www.buildinsider.net/rss");

      MyGrid.DataSource = ds.Tables["item"];
      MyGrid.DataBind();
    }
  </script>
</head>

<body>
<form runat="server">
  <asp:DataGrid id="MyGrid"
      AutoGenerateColumns="false"
      CellPadding="4"
      runat="server" >

    <HeaderStyle BackColor="#BB2255" ForeColor="white" />
    <ItemStyle   BackColor="#FFEEEE" />
    <AlternatingItemStyle BackColor="#FFDDDD" />

    <Columns>
      <asp:BoundColumn
          DataField="title" HeaderText="タイトル" />

      <asp:TemplateColumn HeaderText="概要<hr>URL">
        <ItemTemplate>
          <%# DataBinder.Eval(Container.DataItem, "encoded") %>
          <hr>
          <%# DataBinder.Eval(Container.DataItem, "link") %>
        </ItemTemplate>
      </asp:TemplateColumn>
    </Columns>

  </asp:DataGrid>
</form>
</body>
</html>
1つの列に複数の項目を表示するC#のサンプル・プログラム(multirow.aspx)

 なお、罫線ではなく単に改行のみがよいのなら<hr>を<br>に書き換えればよい。End of Article

カテゴリ:Webフォーム 処理対象:DataGridコントロール
使用ライブラリ:DataGridコントロール
使用ライブラリ:<asp:TemplateColumn>要素
関連TIPS:[ASP.NET]DataGridコントロールで特定のカラムのみを表示するには?
関連TIPS:[ASP.NET]DataGridコントロールの行に通し番号を付けるには?
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]DataGridコントロールの行に通し番号を付けるには?
[ASP.NET]DataGridコントロールでテンプレート列のセルの値を取得するには?
[ASP.NET]DataGridコントロールの編集用テキストボックスをカスタマイズするには?
[ASP.NET]DataGridコントロールの行にデータを埋め込むには?
[ASP.NET]DataGridコントロールのハイパーリンク列で複数のパラメータをデータ連結するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間