Day03-2
目的
GridView
コントロールの内容をカスタマイズしよう
GridView
コントロールが公開するプロパティを変更して、グリッド系の表示や動作をカスタマイズしてみよう。
レッスンの狙い
- アプリケーション開発において、様々なニーズが発生するが、
GridView
コントロールのパラメータ(プロパティ)で大体は実現可能だよ。
GridView
コントロールの使い方を覚えようね。
GridViewコントロールで利用可能なXxxxxxField
クラス
概要
GridView
コントロールでは、配下の列情報を表示するために、XxxxxxFileld
クラスを定義している。
XxxxxxFileld
の設定を変更することで、下記の内容を変更することができる。
GridViewコントロールで利用可能なXxxxxxFieldクラス
クラス |
用途 |
BoundField |
平のテキスト(データの整形時などに使用する標準的なフィールド) |
CheckBoxField |
チェックボックス |
HyperLinkField |
ハイパーリンク |
ImageFieled |
画像 |
ButtonField |
CommandField クラスで定義されていないカスタムコマンドボタン |
CommandField |
[選択][編集][削除]など、あらかじめ用途が決められたコマンドボタン |
TemplateField |
列レイアウトを指定されたテンプレートに従って出力 |
XxxxxxFieldクラスで利用可能な主なプロパティ
共通
プロパティ |
概要 |
ControlStyle |
セル内に配置されたコントロールの外側 |
HeaderStyle |
ヘッダ部の外観 |
FooterStyle |
フッタ部の外観 |
ItemStyle |
セル内のテキストの外観 |
ShowHeader |
ヘッダを表示するか |
HeaderText |
ヘッダ上に表示するテキスト |
FooterText |
フッタ上に表示するテキスト |
SortExpression |
ソートに使用する式 |
InsertVisible |
挿入モードの場合に本フィールドを使用するかどうか |
BoundFieldのプロパティ
プロパティ |
概要 |
DataField |
列にバインドするフィールド名 |
DataFormatString |
フィールド値を整形するための書式文字列 |
HtmlEncode |
フィールド値にHTMLエンコードを適用するか |
ApplyFormatEditMode |
編集モードの場合にもDataFormatString プロパティで指定した書式文字列を利用するか |
ConvertEmptyStringToNull |
から文字列を自動的にnullに変換するか |
NullDisplayText |
フィールド値がnullである場合に表示する代替テキスト |
ReadOnly |
編集モードでフィールド値を変更可能か(Trueの場合は編集不可) |
HyperLinkField
プロパティ |
概要 |
DataNavigateUrlFormatString |
リンク先を表す書式文字列 |
DataNavigateUrlFields |
リンク先にバインドするフィールド名(複数指定も可) |
DataTextFormatString |
リンクテキストを表す書式文字列 |
DataTextField |
リンクテキストにバインドするフィールド名 |
NavigateUrl |
リンク先を表すテキスト(固定値) |
Text |
リンクテキストを表すテキスト(固定値) |
Target |
リンクターゲット |
ImageField
プロパティ |
概要 |
DataImageUrlFormatString |
リンク先を表す書式文字列 |
DataImageUrlField |
リンク先にバインドするフィールド名(複数指定も可) |
DataAltermateTextFormatString |
大体テキストを表す書式文字列 |
DataAltermateTextField |
大体テキストにバインドするフィールド名 |
AltermateText |
代替テキスト(固定値) |
NullImageUrl |
表示画像(フィールド値がnull である場合) |
NullDisplayText |
代替テキスト(フィールドがnull である場合) |
ConvertEmptyStringToNull |
空文字列をnull で自動変換するか |
ReadOnly |
編集モードでフィールド値を変更可能か(Trueの場合は編集不可) |
CheckBoxField
プロパティ |
概要 |
DataField |
バインドするフィールド名 |
Text |
チェックボックスと合わせて表示するテキスト |
CommandField
プロパティ |
概要 |
ShowXxxxxButton |
[編集][削除][選択]ボタンを表示するか |
ButtonType |
ボタンの種類(Button, Link, Image) |
XxxxxImageUrl |
ボタン表示に使用する画像(ButtonType=Image の場合) |
XxxxxText |
ボタンキャプション |
CausesValidation |
ボタンクリック時に検証処理を実行するか |
プロパティ |
概要 |
ButtonType |
ボタンの種類(Button, Link, Image) |
DataTextFormatString |
ボタンキャプションを表す書式文字列 |
DataTextField |
ボタンキャプションにバインドするフィールド名 |
CommandName |
コマンド名 |
ImageUrl |
ボタン画像(ButtonType="Image" の場合) |
Text |
ボタンキャプション(固定値) |
CausesValidation |
ボタンクリック時に検証処理を実行するか |
日付/数値データの表示形式を変更
プレイスホルダ
- プレイスホルダとは、データベースから取得したフィールド値をセットするための
「値の置き場所」である。
例
- DataFormatStringプロパティ
{0:yyyy} 年 {0:MM} 月 {0: dd} 日
- DataFieldプロパティ
- 結果
- その他
{0:#,###}円
{0:yyyy}年{0:MM}月{0:dd}日
HtmlEncodeプロパティ
HtmlEncodeプロパティ
は、バインドされたフィールド値をHTMLエンコードするかどうかを決定する。
- HTMLエンコードとは、値に含まれる「<」「>」「&」のようなHTML予約文字を「
<
」「>
」「&
」などの様な文字列に変換すること。
- 適切なHTMLエンコードが施されていない場合、クロスサイトスクリプティング脆弱性の原因にもなる。
- 特別な理由がない場合、
HtmlEncodeプロパティ'は
True`に設定しておくこと
動的に画像やハイパーリンクを作成
- グリッド表の中で画像やハイパーリンクを表示したい場合には、
ImageField
/HyperLinkField
クラスを使用する。
BoundField
クラスのDataStringFormat
プロパティと同様にImageField
, HyperLinkField
にも下記のプロパティが存在する。
- 下記を使用して、画像URLやリンク先、リンクテキストなどを、データベースのフィールド値から動的に生成することができる。
DataImageUrlFormatString
DataAlternateTextFormatString
DataNavigateUrlFormatString
DataTextFormatString
- これらの
XxxxxFieldString
プロパティにバインドするフィールドは、
それぞれ対応するDataImageUrlField
,DataAlternateTextField
, DataNavigateUrlFields
,DataTextField
プロパティで指定する。
プレイスホルダの書き方
- プレイスホルダの書き方等は、プレイスホルダで説明したとおりだが
HyperLinkField
クラスのDataNavigateUrlFields
プロパティは、複数のプレイスホルダを格納することができる。
- 例:
http://www.wings.msn.to/{0}/{1}.gif
グリッド業の出力を動的にカスタマイズ
GridView
コントロールのRowCreated
イベントがASP.NETがGridView
コントロールの各行を作成するタイミングで発生する。
ページ数を動的に書き込むコード
Protected Sub grid_RowCreated(Byval sender As Object, Byval e As System.Web.UI.WebControls.GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.Footer Then
Dim ltr As New LiteralControl("総ページ数: " & grid.PageCount)
cell.HorizontalAlign = HorizontalAlign.Right
cell.Wrap = False
cell.Controls.Add(ltr)
End If
End Sub
解説
第一引数: sender As Object
- イベントの発生元となったオブジェクト
- 今回のサンプルであれば、
GridView
オブジェクト
第二引数
- 発生したイベントに関する情報を格納する
EventArgs
オブジェクト
- または、
EventArgs
オブジェクトの機能を引き継ぐ派生クラス
TableCellクラスで利用可能な主なメンバ
プロパティ |
概要 |
ColumnSpan |
セル幅を示す列数 |
RowSpan |
セルの高さを示す行数 |
HorizontalAlign |
水平方向の配置 |
VerticalAlign |
垂直方向の配置 |
Text |
セル内のテキスト |
Wrap |
セルの内容を折り返すか |
Control |
セル内のコントロール群 |
RowCreatedイベントハンドラでグリッド行の内容を操作する手順
捜査対象の行をRowType
プロパティで特定
GridViewRow.Cell
プロパティを介して、行内の特定セルを取得
TabaleCell.Control
プロパティで取得したControlCollection
オブジェクトに対してコントロールを追加/削除
まとめ
GridViewコントロールの各列をカスタマイズするには、XxxxxField
クラスを利用する。
XxxxxField
クラスのXxxxxFormatString
プロパティによって、それぞれの列にバインドされたデータを格納することができる。
- XxxxxFormatStringプロパティには
{インデックス番号[:書式文字列]}
の形式でプレイスホルダを埋め込むことが可能。
- 書式文字列は、数値/日付データ用にそれぞれ標準/カスタムの合計4種類がある。
- 標準書式はそれ単体で、カスタム書式は複数の指定子を組み合わせて使用する。
GridView
コントロールのRowCreated
イベントを使用することで、グリッドの内容をプログラムから操作できる。
TOP