連載:VS 2005でいってみようDBプログラミング

第3回 データアクセス/データソース・コントロールを使い倒せ!

山田 祥寛(http://www.wings.msn.to/
2006/04/29
Page1 Page2 Page3

■GridViewカスタマイズのポイント

 ここでポイントとなる点は3つあります。以下にこれらを順に説明していきます。

(1)GridViewコントロールで利用可能なフィールド列は6種類

 GridViewコントロールでは、配下の列情報をカスタマイズするために以下の表2のようなXxxxxFieldフィールドを利用できます。

フィールド 概要
BoundField プレーンなテキストを生成(数値/日付などの整形は可能)
CommandField [選択][更新][削除]など決められたコマンド・ボタンを生成
ButtonField CommandFieldフィールドでは定義されていない任意のボタンを生成
HyperLinkField ハイパーリンクを生成
ImageField 画像を生成
TemplateField テンプレートで指定されたレイアウトに基づいて列を生成
表2 GridViewコントロールで利用可能なレイアウト

 ちなみに、デフォルトではデータベースから取得した列が、BoundFieldフィールドとしてGridViewコントロール上に定義されているはずです。BoundFieldフィールドは、データをそのままプレーンなテキストとして表示するためのフィールドを表します。

 以下に、それぞれのフィールドで利用可能な主なプロパティを挙げておきましょう。なお、TemplateFieldフィールドについては、次回以降にあらためて紹介することにします。

フィールド プロパティ 概要
共通 ShowHeader ヘッダを表示するか
HeaderText ヘッダ・テキスト
FooterText フッタ・テキスト
HeaderImageUrl ヘッダに表示するアイコン画像のURL
SortExpression ソートに使用する式
BoundField DataField バインドするフィールド名
DataFormatString 表示形式を指定する書式文字列
HtmlEncode フィールド値に対してHTMLエンコードを適用するか
NullDisplayText フィールド値がnullである場合に表示するテキスト
ApplyFormatInEditMode 編集モードで、DataFormatStringプロパティで指定された書式をフィールド表示に使用するか
ConvertEmptyStringToNull 空文字列をnull値に自動変換するか
ReadOnly 編集モードでフィールド値を変更できるか(Trueの場合は不可)
ButtonField ButtonType ボタンの種類(Button|Link|Image)
CausesValidation ボタン・クリック時に検証処理を行うか
CommandName コマンド名
DataTextField ボタンのキャプションにバインドするフィールド名
DataTextFormatString ボタンのキャプションに適用する書式文字列
ImageUrl ボタン画像
Text ボタンのキャプションに表示するテキスト
CheckBoxField DataField バインドするフィールド名
Text チェック・ボックスの横に表示するテキスト
CommandField ButtonType ボタンの種類(Button|Link|Image)
CausesValidation ボタン・クリック時に検証処理を行うか
XxxxxImageUrl [編集][削除][選択][更新][キャンセル]ボタンの画像
XxxxxText [編集][削除][選択][更新][キャンセル]ボタンのキャプション
ShowXxxxxButton [編集][削除][選択]ボタンを表示するか
HyperLinkField DataNavigateUrlFields リンク先にバインドするフィールド名(複数可)
DataNavigateUrlFormatString リンク先に使用する書式文字列
DataTextField リンク・テキストにバインドするフィールド名
DataTextFormatString リンク・テキストに使用する書式文字列
NavigateUrl リンク先を表すテキスト
Text リンク・テキストを表すテキスト
Target リンク先を表示するターゲット
ImageField AlternateText 代替テキストを表すテキスト
ConvertEmptyStringToNull 空文字列をnull値に自動変換するか
DataAlternateTextField 代替テキストにバインドするフィールド名
DataAlternateTextFormatString 代替テキストに適用する書式文字列
DataImageUrlField 画像URLにバインドするフィールド名
DataImageUrlFormatString 画像URLに適用する書式文字列
NullDisplayText フィールド値がnullである場合の代替テキスト
NullImageUrl フィールド値がnullである場合の表示画像
ReadOnly 編集モードでフィールド値を変更できるか(Trueの場合は不可)
表3 GridViewコントロールのフィールドで利用可能な主なプロパティ

(2)数値や日付を整形するのはDataFormatStringプロパティ

 BoundFieldフィールド上で、データベースなどから取得した数値や日付データに対して書式を適用するには、DataFormatStringプロパティを使用します。

 DataFormatStringプロパティには、そのテキスト内に、

{X[:Format]}

というコロン区切りの形式からなる「プレイスホルダ」を含めることが可能です。プレイスホルダとは、フィールドに対して与えられたパラメータ(この場合はDataFieldプロパティで指定されたフィールド値)をセットするための「置き場所」のことです。

 DataFormatStringプロパティを指定しても、プレイスホルダが含まれていない場合、DataFieldプロパティで指定されたフィールド値は無視されますので、注意してください。

 Xの部分にはパラメータ・リストのインデックスを表す0スタートの値を、Forma部分には以下の表4に示すような日付/数値の書式指定子を指定します。ちなみに、BoundFieldフィールドでは、パラメータ(DataFieldプロパティ)として1つのフィールド値しか指定できませんので、Xの部分は常に0となります。

分類 書式指定子 概要
数値
(標準)
C、c 通貨
D、d 10進数
E、e 指数(例:E+ddd)
F、f 固定小数点(例:-ddd.ddd)
G、g 一般的な数値(値に依存)
N、n 数値(例:-d,ddd.ddd)
P、p パーセント(数値に100を乗算したものを表示)
X、x 16進数(整数型のみ有効)
数値
(カスタム)
0 けた合わせ数値(0でも表示)
# けた合わせ数値(0の場合は非表示)
, けた区切り記号(けた落としも可。例:「0,」は1000で除算)
. 小数点
% パーセント(数値に100を乗算)
E0、E+0、E-0、E0 指数表記
; 正と負のサブパターン区切り(例:「正数;0;負数」)
日付
(標準)
d 日付(短い形式)
D 日付(長い形式)
t 時刻(短い形式)
T 時刻(長い形式)
f 日付/時刻(完全。短い形式の時刻)
F 日付/時刻(完全。長い形式の時刻)
g 日付/時刻(一般。短い形式の時刻)
G 日付/時刻(一般。長い形式の時刻)
Y、y 年月
M、m 月日のみ
R、r RFC1123形式(例:Sat, 26 Jun 2004 20:11:04 GMT)
s ISO 8601形式(例:2004-06-26T20:11:04)
u 世界時刻形式(例:2004-06-26 20:11:04Z)
日付
(カスタム)
d 日(1〜31)
dd 日(01〜31)
ddd 曜日(省略形式)
dddd 曜日(完全形式)
g、gg 紀元(A.D.|B.C.)
h 時間(12時間表記。1〜12)
hh 時間(12時間表記。01〜12)
H 時間(24時間表記。0〜23)
HH 時間(24時間表記。00〜23)
m 分(0〜59)
mm 分(00〜59)
M 月(1〜12)
MM 月(01〜12)
MMM 月名(省略形)
MMMM 月名(完全形)
s 秒(0〜59)
ss 秒(00〜59)
t 午前/午後(省略形)
tt 午前/午後(完全形)
y 年(0〜99)
yy 年(00〜99)
yyyy 年(0000〜9999)
z タイムゾーンのオフセット(-12〜+13。1けたの場合はそのまま)
zz タイムゾーンのオフセット(-12〜+13。1けたの場合に0を付加)
zzz タイムゾーンのオフセット(-12:00〜+13:00)
表4 数値/日付の書式指定子(標準/カスタム)

 書式指定子は、数値/日付用にそれぞれ標準/カスタムの合計4種類が用意されています。標準の書式指定子はそれ単体で使用しますが、カスタムの書式指定子はいくつかの指定子を組み合わせて使用するのが一般的です。

 例えば、「{0:c}」のように指定すれば、出力は「\1,213」のような値を出力しますし、「{0:#,###円}」のように指定すれば「1,213円」のような値を出力します。「{0:#,###円}」は、「{0:#,###}円」と記述しても同意です。

[コラム]BoundFieldフィールドで書式文字列が適用されない

 DataFormatStringプロパティに書式文字列を適用したのに、列の内容がそのまま出力されてしまう。そんな現象に遭遇したら、BoundField.HtmlEncodeプロパティを確認してみましょう。HtmlEncodeプロパティは出力値に含まれる「<」や「>」「&」のような文字列を「&lt;」「&gt;」「&amp;」などにエスケープ処理するかどうかを指定します。

 クロスサイト・スクリプティング攻撃を未然に防ぐためにも、本プロパティの値は、原則、デフォルトの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プログラミング」


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 記事ランキング

本日 月間