.NET TIPS [ASP.NET]Repeater/DataListコントロールのテンプレートを別ファイルで管理するには?山田 祥寛2004/10/08 |
|
|
ASP.NETには、RepeaterコントロールやDataListコントロールのように、与えられたデータセットを簡単にレイアウトするためのサーバ・コントロールが用意されている。これらのサーバ・コントロールでは、あらかじめ各部のテンプレートを設定しておくだけで、後はサーバ・コントロールが適宜テンプレートを適切な個所に適用し、データソースを整形してくれる。Repeaterコントロール、DataListコントロールで指定可能なテンプレートの種類は以下のとおりだ。
テンプレート | 概要 |
HeaderTemplate | ヘッダ部。リストの出力に先立って1回だけ適用 |
ItemTemplate | データ本体。データソースの1レコードごとに適用 |
AlternationItemTemplate | データ本体。データソースの1レコード置きに適用(無指定時はItemTemplateを適用) |
SelectedItemTemplate | データ本体。行が選択モードにある場合に適用 |
EditItemTemplate | データ本体。行が編集モードにある場合に適用 |
SeparatorTemplate | 区切り部分。データとデータの区切りに適用 |
FooterTemplate | フッタ部。リスト出力の最後に1回だけ適用 |
Repeater/DataListコントロールで利用可能なテンプレートの種類 | |
Repeater/DataListコントロールは、テンプレートにより概観(=表示方法)を制御できる。ただしRepeaterコントロールでは、SelectedItemTemplateテンプレートやEditItemTemplateテンプレートは利用できない。 |
ところでこのテンプレートだが、複雑なレイアウトを定義したい場合にはどうしても冗長になりがちであり、コードの可読性を低下させる一因ともなる。また、テンプレートによっては、複数のページで使い回したいというようなケースも多々あるだろう。そのような場合に、テンプレートを個々のページ(.aspxファイル)にハード・コーディングしてしまうのは好ましくない。
そこで本稿では、Repeater/DataListコントロールから利用可能なテンプレートを、「.ascx」ファイルとして外部ファイル化する方法について紹介する。なお、本稿で扱うサンプルは、別稿「TIPS:[ASP.NET]データベースの内容をクライアントにダウンロード提供するには?」で紹介したものを修正したものだ。ロジックの詳細については、別稿の方を参照いただきたい。
1. 「.aspx」ファイルからテンプレート部を除外する
別稿のサンプル・プログラムdl_cs.aspx、dl_vb.aspxからテンプレートの定義部を別ファイルとして取り除いたのが、以下のコードだ。
|
|
外部ファイル化したテンプレートを利用するサンプル・プログラム(template_cs.aspx) |
|
|
外部ファイル化したテンプレートを利用するサンプル・プログラム(template_vb.aspx) |
注目していただきたいのは、コード中の太字の部分だ。外部ファイル化したテンプレートは、Page.LoadTemplateメソッドで有効化することができる。
2. テンプレートを外部ファイル化する
次に、「.aspx」ファイルから除外したテンプレートを、それぞれ「.ascx」ファイルとして外部ファイル化してみよう。まず、ヘッダ部のテンプレートには動的なコードは含まれていないので、C#、VB.NETのコードいずれからも共通して利用することができる。
|
|
外部ファイル化したC#/VB.NET共通のテンプレート(template_header.ascx) |
動的なコードを含む部分は、C#やVB.NETの言語ごとに作成する。
|
|
外部ファイル化したC#のテンプレート(template_item_cs.ascx) |
|
|
外部ファイル化したVB.NETのテンプレート(template_item_vb.ascx) |
ここで注目していただきたいのは、データバインドの部分だ。分離前のコード(dl_cs.aspx、dl_vb.aspx)では、Container.DataItemと記述していた部分を、「((RepeaterItem)Container).DataItem」(C#の場合。VB.NETは「CType(Container,RepeaterItem).DataItem」)と明示的にキャスト(型変換)しているのがお分かりになるだろうか。これは、分離前はASP.NETが親コントロールを動的に認識して適切な型に変換していたものが、コードを分離したことで自動的に判定できなくなったことによる。テンプレートを外部ファイル化した場合には、必ず明示的な型変換を行う必要があるということを覚えておこう。なお、Container.DataItemに関する詳細は、別稿「TIPS:[ASP.NET]Container.DataItemの正体は?」が詳しいので、併せて参照いただきたい。
以上で、準備は完了だ。サンプルを実行し、別稿「TIPS:[ASP.NET]データベースの内容をクライアントにダウンロード提供するには?」と同様の結果が得られれば成功だ。
カテゴリ:Webフォーム 処理対象:テンプレート 使用ライブラリ:Repeaterコントロール 使用ライブラリ:DataListコントロール 使用キーワード:テンプレート 関連TIPS:[ASP.NET]データベースの内容をクライアントにダウンロード提供するには? 関連TIPS:[ASP.NET]Container.DataItemの正体は? |
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|