連載:VS 2005でいってみようDBプログラミング第3回 データアクセス/データソース・コントロールを使い倒せ!山田 祥寛(http://www.wings.msn.to/)2006/04/29 |
|
|
■GridViewカスタマイズのポイント
ここでポイントとなる点は3つあります。以下にこれらを順に説明していきます。
(1)GridViewコントロールで利用可能なフィールド列は6種類
GridViewコントロールでは、配下の列情報をカスタマイズするために以下の表2のようなXxxxxFieldフィールドを利用できます。
| ||||||||||||||
表2 GridViewコントロールで利用可能なレイアウト | ||||||||||||||
ちなみに、デフォルトではデータベースから取得した列が、BoundFieldフィールドとしてGridViewコントロール上に定義されているはずです。BoundFieldフィールドは、データをそのままプレーンなテキストとして表示するためのフィールドを表します。
以下に、それぞれのフィールドで利用可能な主なプロパティを挙げておきましょう。なお、TemplateFieldフィールドについては、次回以降にあらためて紹介することにします。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
表3 GridViewコントロールのフィールドで利用可能な主なプロパティ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(2)数値や日付を整形するのはDataFormatStringプロパティ
BoundFieldフィールド上で、データベースなどから取得した数値や日付データに対して書式を適用するには、DataFormatStringプロパティを使用します。
DataFormatStringプロパティには、そのテキスト内に、
{X[:Format]}
というコロン区切りの形式からなる「プレイスホルダ」を含めることが可能です。プレイスホルダとは、フィールドに対して与えられたパラメータ(この場合はDataFieldプロパティで指定されたフィールド値)をセットするための「置き場所」のことです。
DataFormatStringプロパティを指定しても、プレイスホルダが含まれていない場合、DataFieldプロパティで指定されたフィールド値は無視されますので、注意してください。
Xの部分にはパラメータ・リストのインデックスを表す0スタートの値を、Forma部分には以下の表4に示すような日付/数値の書式指定子を指定します。ちなみに、BoundFieldフィールドでは、パラメータ(DataFieldプロパティ)として1つのフィールド値しか指定できませんので、Xの部分は常に0となります。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
表4 数値/日付の書式指定子(標準/カスタム) |
書式指定子は、数値/日付用にそれぞれ標準/カスタムの合計4種類が用意されています。標準の書式指定子はそれ単体で使用しますが、カスタムの書式指定子はいくつかの指定子を組み合わせて使用するのが一般的です。
例えば、「{0:c}
」のように指定すれば、出力は「\1,213」のような値を出力しますし、「{0:#,###円}
」のように指定すれば「1,213円」のような値を出力します。「{0:#,###円}
」は、「{0:#,###}円
」と記述しても同意です。
[コラム]BoundFieldフィールドで書式文字列が適用されない DataFormatStringプロパティに書式文字列を適用したのに、列の内容がそのまま出力されてしまう。そんな現象に遭遇したら、BoundField.HtmlEncodeプロパティを確認してみましょう。HtmlEncodeプロパティは出力値に含まれる「<」や「>」「&」のような文字列を「<」「>」「&」などにエスケープ処理するかどうかを指定します。 クロスサイト・スクリプティング攻撃を未然に防ぐためにも、本プロパティの値は、原則、デフォルトのTrueとしておくことをお勧めしますが、本プロパティがTrueの場合にはDataFormatStringプロパティで指定した書式が適用されませんので、注意してください。DataFormatStringプロパティによるデータ整形を行う場合には、HtmlEncodeプロパティをFalseにする必要があります。 |
(3)動的にURLを生成するには、XxxxxField(s)/XxxxxxFormatStringプロパティ
ImageField/HyperLinkFieldフィールドでは、データベースから取得した値に基づいて、画像の取得先URL、リンク先URL、リンク・テキストを動的に生成することが可能です。
ImageFieldフィールドではDataImageUrlFieldプロパティでバインドするフィールド名を、DataImageUrlFormatStringプロパティでURLの書式を表します。同様に、HyperLinkFieldフィールドでは、DataNavigateUrlFields/DataNavigateUrlFormatString、DataTextField/DataTextFormatStringプロパティを使用します。
書式文字列を指定する方法は、先ほど(2)で紹介したとおりですが、DataNavigateUrlFormatStringプロパティのみ複数のプレイスホルダを埋め込むことができる点に注目です。サンプルでは、{0}だけをプレイスホルダとして指定していますが、例えば、
http://www.wings.msn.to/books/{0}/{1}_logo.jpg
のように指定することもできます。
このような場合、対応するDataNavigateUrlFieldsプロパティでは「isbn, publish」のようにカンマ区切りで複数のフィールドを指定する必要があります。これによって、{0}にはisbnフィールドの値が、{1}にはpublishフィールドの値が、それぞれセットされます。
INDEX | ||
Visual Studio 2005でいってみようDBプログラミング | ||
第3回 データアクセス/データソース・コントロールを使い倒せ! | ||
1.GridViewコントロールの表示列をカスタマイズする | ||
2.GridViewカスタマイズのポイント | ||
3.グリッド表の内容をプルダウン・メニューで絞り込む | ||
「Visual Studio 2005でいってみようDBプログラミング」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|