SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

データベースのデータを小計つきで表示する.NETアプリケーションを作る

「PowerTools ComponentOne Studio 2012J」のC1FlexGridコントロールを使った.NETアプリケーションの作成

  • このエントリーをはてなブックマークに追加

C1FlexGridコントロールの小計機能

 C1FlexGridコントロール全体の機能の概要、およびデータ連結機能については、記事『データベースのデータからバブルチャートを作成する.NETアプリケーションを作る』で紹介していますので、こちらを参照してください。

 ここでは、C1FlexGridコントロールの小計機能について説明します。

アウトラインとデータの集計

 C1FlexGridコントロールには、データを集計して階層表示するためのメソッドとプロパティが用意されています。

 オリジナルのグリッドに、指定した列のデータを集計し小計行を追加します。小計は複数の階層に分けて行うことができ、その階層をツリー表示することができます。

 例えば、営業成績を集計する場合、都道府県別・営業所別・担当者別にそれぞれ小計を出します。C1FlexGridコントロールはこれを自動的に行い、しかも階層順にツリー表示してくれます。

 次の画面は、ヘルプファイルで紹介している小計の実行例ですが、売り上げの合計を「総計」「楽器の種類別」「地区別」に分けて行っています。売上合計は、まず楽器の種類別に行い、その内訳をさらに地区別に集計しています。これらは、すべてC1FlexGridコントロール側で行っています。グリッドにはこれらの小計用行が追加され、さらに階層データはツリーで表示されます。ユーザーはツリーの記号「+」「-」をクリックして、ツリーを展開・縮小することができます。

小計の実行例(ヘルプファイルより)
小計の実行例(ヘルプファイルより)

Subtotalメソッドの機能と書式

 小計を実行するには、C1FlexGridクラスの「Subtotal」メソッドを実行します。このメソッドは7つのオーバーロードメソッドが存在し、もっとも代表的な引数を持ったメソッドは次のメソッドです。

Subtotal(AggregateEnum, Int32, Int32, Int32, String)

 引数は5つで、それぞれ次の値を指定します。

Subtotalメソッドの書式

Visual Basic (宣言)
Public Sub Subtotal ( _
    aggType As AggregateEnum, _
    level As Integer, _
    groupOn As Integer, _
    totalOn As Integer, _
    caption As String _
)
C#
public void Subtotal(
    AggregateEnum aggType,
    int level,
    int groupOn,
    int totalOn,
    string caption
)
aggType

 計算する集計の種類をAggregateEnum列挙体の値で指定します。

level

 新しい小計行に割り当てるアウトラインレベル(階層レベル)を数値で指定します。このパラメータを使用すると複数レベルの小計を作成でき、アウトラインツリーの表示に反映されます。指定する数値はトップレベルの階層が「0」で、以降階層が深くなるほど数字が大きくなります。

groupOn

 グループ化する列を番号で指定します。例えば、先頭列でグループ化し小計を出したい場合は「0」を指定します。「-1」を指定すると、全体を集計するよう指示することになります。

totalOn

 集計したい値(通常は数値)のある列を番号で指定します。

caption

 グリッドに追加される小計行に、ヘッダ代わりに挿入するテキストを指定します。直接文字列を指定しますが、「"{0}"」と指定するとグループ化したデータを元にテキストを作成します。例えば、次の例は「地方名」「都道府県名」ごとにグループ化し、テキストに"{0}計"と指定したので小計行の列見出しにそれぞれグループ化したデータが使用されています。

小計行の列見出しにそれぞれグループ化したデータが使用されている
小計行の列見出しにそれぞれグループ化したデータが使用されている

Subtotalメソッドで行える集計の種類

 小計は合計計算だけでなく、平均値や最大値など12種類の集計値を計算できます。これらは、AggregateEnum列挙体のメンバを指定します。

AggregateEnum列挙体のメンバ
メンバ 機能
None 集計なし。この設定は、数値集計なしでアウトラインツリーを作成するために、
Subtotal(AggregateEnum, Int32, Int32, Int32, Int32, String) メソッドで使用されます。
Clear 既存の集計をクリアします。この設定は、通常、新しい小計を計算する前に既存の小計をクリアするため、Subtotal(AggregateEnum, Int32, Int32, Int32, Int32, String) メソッドで使用されます。
Sum 範囲内のすべての値の合計を返します。
Percent 総計に対する割合(百分率)。この設定は、各サブグループの総計に対する割合を計算するために、Subtotal(AggregateEnum, Int32, Int32, Int32, Int32, String) メソッドで使用されます。この設定は、Aggregate(AggregateEnum, CellRange, AggregateFlags) メソッドでは使用できません。
Count 範囲内の空でないセルの数を返します。 
Average 範囲内の空でないセルの平均値を返します。
Max 範囲内の最大値を返します。
Min 範囲内の最小値を返します。
Std 範囲内の値の標本標準偏差を返します( n-1 に基づく式を使用)。
Var 範囲内の値の標本分散を返します( n-1 に基づく式を使用)。
StdPop 範囲内の値の母標準偏差を返します( n に基づく式を使用)。
VarPop 範囲内の値の母分散を返します( n に基づく式を使用)。

 各引数は、値をそのまま指定しても構いませんが、名前付き引数を使うこともできます。

Visual Basic
C1FlexGrid1.Subtotal(agree_enum, level:=-1, groupOn:=-1, totalOn:=3, caption:="総計")
C#
c1FlexGrid1.Subtotal(agree_enum, level:-1, groupOn:-1, totalOn:3, caption:"総計");

 Visual BasicとC#で少し書式が違いますので注意してください。

小計行のスタイルとアウトラインツリー表示

 Subtotalメソッドによって小計行が追加されると、その行には自動的に小計行用のスタイルが割り当てられます。

 設計時にスタイルエディタを使用するか、もしくは実行時にコードを使用してアウトラインスタイルのプロパティを変更すると、小計行の外観をカスタマイズできます。

 また、CellStyleクラスを使用してグリッドのセルスタイルを変更することで、独自のスタイルを作成することもできます。このCellStyleクラスには、CellStyleEnum列挙体のメンバを使用して5レベルまでの小計行用の組み込みスタイルを使うこともできます。

 ツリー表示を行う際の、階層を結ぶラインやシンボルの表示についてもカスタマイズすることができます。これらは、グリッド内のアウトラインツリーの位置と外観を制御するGridTreeクラスを使用します。

 GridTreeクラスのStyleプロパティは、アウトラインツリーのスタイルを取得または設定するプロパティで、引数にTreeStyleFlags列挙体のメンバを指定することで、アウトラインツリーの表示/非表示や折りたたみ記号、ツリー線の表示/非表示を設定することができます。

 次のコードは、アウトラインツリーに折りたたみ記号とツリー線を表示するように設定します。

Visual Basic
C1FlexGrid1.Tree.Style = TreeStyleFlags.SimpleLeaf
C#
c1FlexGrid1.Tree.Style = TreeStyleFlags.SimpleLeaf;
アウトラインツリーに折りたたみ記号とツリー線を表示する
アウトラインツリーに折りたたみ記号とツリー線を表示する
TreeStyleFlags列挙体のメンバ
メンバ名 説明
None アウトラインツリーを表示しません。
Lines ノード行の横にツリーの線を表示します。
Symbols ノード行に展開/折りたたみ記号を表示します。
ButtonBar 上端の固定行にアウトラインボタンを並べて表示します。
Leaf すべての行(ノードとデータ)の横にツリーの線を表示します。
Complete Lines、Symbols、およびButtonBarの組み合わせ。
Simple LinesおよびSymbolsの組み合わせ。
CompleteLeaf Lines、Symbols、ButtonBar、およびLeafの組み合わせ。
SimpleLeaf Lines、Symbols、およびLeafの組み合わせ。

次のページ
ノードの部分展開

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6864 2012/11/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング