.NET TIPS [ASP.NET]GridViewコントロールのフッタ行に合計値/平均値を表示するには?[2.0、3.0、3.5、C#、VB]山田 祥寛2010/03/11 |
|
|
GridViewコントロールの列に数値データが含まれる場合、この合計値や平均値をフッタ行に表示することができる。
以下の画面は、「TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?」で作成したグリッド表を基に、データベースに登録されている書籍単価の平均値を求め、フッタ行に表示したものだ。
グリッド表のフッタ行に単価の平均値を表示 |
目的自体は誤解のしようもなく明快であるので、さっそく具体的な手順の紹介に移ろう。なお、本稿ではグリッド表そのものの作成方法については、前掲のTIPSに譲り、グリッド表に対してフッタ行を追加する差分の手順にフォーカスする。
1. グリッド表のプロパティを設定する
以下の表のように、GridViewコントロールのプロパティ設定を変更する。
プロパティ | 設定値 |
AllowPaging | False |
ShowFooter | True |
GridViewコントロールのプロパティ設定 |
フッタ行を表示するには、ShowFooterプロパティをTrue(デフォルト値はFalse)に設定する必要がある。
AllowPagingプロパティ(ページングを有効にするか)をFalseにしているのは、ページングが有効になっていると、現在のページに表示された書籍についてしか平均値を求められないためだ。本稿のようなケースでは、ページごとに平均値を求めても意味はないので、ページングは無効にしている。
2. イベント・ハンドラを定義する
平均値を求めるとともに、その結果をフッタ行に反映させるためのイベント・ハンドラを定義する。具体的なコードは、以下のとおりである。
|
||
書籍単価の平均値を求め、その結果をフッタに表示するイベント・ハンドラ(Average.aspx。上:C#、下:VB) |
グリッド表の各行にアクセスするには、RowDataBoundイベントを利用すればよい。RowDataBoundイベントは、グリッド表の各行にデータがバインドされたタイミングで発生するイベントだ。RowDataBoundイベントを利用することで、グリッド表の各行における値にアクセスしたり、行そのものの出力をカスタマイズしたりすることが可能になる。
RowDataBoundイベント・ハンドラでは、第2引数として渡されたGridViewRowEventArgsオブジェクト(System.Web.UI.WebControls名前空間)のRowプロパティにアクセスすることで、現在描画している行情報(GridViewRowオブジェクト)を取得できる。
ここでは、取得したGridViewRowオブジェクトから、さらにRowTypeプロパティにアクセスして、現在行の種類を判定しているわけだ。RowDataBoundイベントは、データ行だけではなく、ヘッダ/フッタ行についても発生している点に要注目である。
RowTypeプロパティの戻り値は、以下のとおり。
値 | 概要 |
DataRow | データ行 |
Footer | フッタ行 |
Header | ヘッダ行 |
EmptyDataRow | 空行(データが存在しない場合) |
Pager | ページャ |
Separator | 区切り行 |
RowTypeプロパティの戻り値(DataControlRowType列挙体のメンバ) |
(1)では、現在行がデータ行である場合に、DataItemプロパティ経由で基となるデータ・オブジェクト(DataRowViewオブジェクト)を取得し、そのpriceフィールドの値を変数sumに足し込んでいるわけだ。これによって、すべての行をバインドし終わったときには、全書籍の単価合計が変数sumにセットされていることになる。
(2)は、(1)での結果を最終的にフッタ行に反映させている。現在行のセル群はGridViewRowオブジェクトのCellsプロパティでアクセスできる。ここでは、現在行の左から3番目のセルに「合計値(変数sum) / グリッド表の行数」――つまり、書籍単価の平均値をセットしている。
以上で、一連の手順は完了である。サンプルを実行し、冒頭の画面のように、グリッド表のフッタ行に単価平均が表示されていることを確認してほしい。
利用可能バージョン:.NET Framework 2.0 利用可能バージョン:.NET Framework 3.0 利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:GridViewコントロール 使用ライブラリ:GridViewコントロール 関連TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには? |
「.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|