|
.NET TIPS [ASP.NET]DataGridコントロールのフッターに合計行を表示するには?デジタルアドバンテージ2003/11/14 |
![]() |
|
|
|
DataGridコントロールの列として金額や数量などの数値を表示している場合、グリッドの一番下に作成されるフッター行を利用して、その合計を表示することができる。
次の画面は今回作成するサンプル・プログラムの実行画面である。これは「TIPS:[ASP.NET]DataGridコントロールで編集を可能にするには?」で示したサンプル・プログラムに合計表示の機能を追加したものだ。
![]() |
| 合計行を表示するサンプル・プログラム(sumdg.aspx)の実行画面 |
| このグリッドでは編集機能も実装している。[編集]ボタンをクリックし「数量」列の値を変更すれば、それに従って合計値も変化するようになっている。 |
ここでポイントとなるのは、フッターおよびフッターへの合計の表示と、各行のセルから合計を求める方法である。
フッターの表示
デフォルトでは、DataGridコントロールにはフッターは表示されない。フッターを表示させるにはまず、<asp:DataGrid>タグにShowFooter="true"属性を追加する必要がある。そしてフッターを表示した場合には、ヘッダーや通常の行と同様に、<FooterStyle>要素によりその行のスタイルが指定可能だ。
<asp:DataGrid id="MyGrid"
ShowFooter="true"
……
runat="server" >
<HeaderStyle BackColor="#5522BB" ForeColor="white" />
<ItemStyle BackColor="#EEEEFF" />
<FooterStyle BackColor="#330099" ForeColor="white" />
……
</asp:DataGrid>
セルの値から合計値を算出
次にグリッド内の各行に表示されている数値の合計を求める。ここでは「TIPS:[ASP.NET]DataGridコントロールですべての行にアクセスするには?」で解説しているItemDataBoundイベントを利用する方法により、各行がデータ連結される際に呼び出されるメソッドで行に含まれる数値データを取得し、合計値として足し込んでいく。
ItemDataBoundイベントのイベント・ハンドラとなるこのメソッドは次のようになる。なお、変数sumは合計値を保持するためのフィールドである。
int sum = 0;
void MyGrid_Bound(object Sender, DataGridItemEventArgs e) {
switch (e.Item.ItemType) {
case ListItemType.Item:
case ListItemType.AlternatingItem:
case ListItemType.EditItem:
DataRowView drv = (DataRowView)e.Item.DataItem;
sum += (int)drv["Quantity"];
break;
}
}
行に含まれる数値は、データ連結によりセル内に埋め込まれた文字列としても取得可能だが、ItemDataBoundイベントを利用する場合には、行に連結されるデータソース内の要素に「e.Item.DataItem」として直接アクセスできる。
データソースがデータテーブル(DataTableオブジェクト)である場合、このメソッドが呼ばれるときのe.Item.DataItemの値はDataRowViewクラス(System.Data名前空間)のオブジェクトである。DataRowViewオブジェクトは、DataTableオブジェクト内の行を示すDataRowオブジェクトから作成された「ビュー」であるが、行内のデータはカラム名を指定したインデクサにより、DataRowオブジェクトと同様にその値を取り出すことができる。
上記のメソッドでは、switch文のcaseラベルの1つに「ListItemType.EditItem」を加えている点に注意してほしい。今回のサンプル・プログラムでは行の編集を可能にしている。ある行が編集中である場合(DataGridオブジェクトのEditItemIndexプロパティで行を指定している場合)、その行のItemTypeプロパティはListItemType.EditItemとなっているため、編集中の行がグリッドに存在する場合にも正しい合計値を求めるに、このcaseラベルが必要となる。
フッターに合計値を表示
フッター内にデータを表示するには、それがリテラル文字列であれば、連結列のFooterText属性や、テンプレート列の<FooterTemplate>要素で記述することができる。しかし今回のような場合には、合計値として表示する内容はすべての行のデータ連結後に決まる(もちろんデータソースの各要素からも合計値を求めることができるが)。幸いにしてフッターについてもItemDataBoundイベントが発生し、しかもそれはほかのすべての行が連結し終わった後に発生する。よってフッターに合計値を表示するには、次のようなcaseラベルとコードを上記のswitch文に追加すればよい。
case ListItemType.Footer:
e.Item.Cells[2].Text = "合計:" + sum;
e.Item.Cells[2].Font.Bold = true;
break;
フッターのItemTypeプロパティの値はListItemType.Footerである。ここではフッター内の左から3番目のセルに合計値を文字列としてセットし、目立つようにセルのフォントをボールドにしている。
合計行を表示するサンプル・プログラム
冒頭で示したサンプル・プログラムのソース・コードは次のようになる。すでに述べたように、このプログラムは「TIPS:[ASP.NET]DataGridコントロールで編集を可能にするには?」に合計行表示のためのコードを追加している。太字で示している部分が追加したコードだ。
|
|
| 合計行を表示するC#のサンプル・プログラム(sumdg.aspx) | |
このサンプル・プログラムは、コードの追加を行っただけで、元のコードにはまったく編集を加えていない。![]()
| カテゴリ:Webフォーム 処理対象:DataGridコントロール 使用ライブラリ:DataGridコントロール 使用ライブラリ:DataRowViewクラス(System.Data名前空間) 関連TIPS:[ASP.NET]DataGridコントロールで編集を可能にするには? 関連TIPS:[ASP.NET]DataGridコントロールですべての行にアクセスするには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



