C1FlexGridコントロールの小計機能
C1FlexGridコントロール全体の機能の概要、およびデータ連結機能については、記事『データベースのデータからバブルチャートを作成する.NETアプリケーションを作る』で紹介していますので、こちらを参照してください。
ここでは、C1FlexGridコントロールの小計機能について説明します。
アウトラインとデータの集計
C1FlexGridコントロールには、データを集計して階層表示するためのメソッドとプロパティが用意されています。
オリジナルのグリッドに、指定した列のデータを集計し小計行を追加します。小計は複数の階層に分けて行うことができ、その階層をツリー表示することができます。
例えば、営業成績を集計する場合、都道府県別・営業所別・担当者別にそれぞれ小計を出します。C1FlexGridコントロールはこれを自動的に行い、しかも階層順にツリー表示してくれます。
次の画面は、ヘルプファイルで紹介している小計の実行例ですが、売り上げの合計を「総計」「楽器の種類別」「地区別」に分けて行っています。売上合計は、まず楽器の種類別に行い、その内訳をさらに地区別に集計しています。これらは、すべてC1FlexGridコントロール側で行っています。グリッドにはこれらの小計用行が追加され、さらに階層データはツリーで表示されます。ユーザーはツリーの記号「+」「-」をクリックして、ツリーを展開・縮小することができます。
Subtotalメソッドの機能と書式
小計を実行するには、C1FlexGridクラスの「Subtotal」メソッドを実行します。このメソッドは7つのオーバーロードメソッドが存在し、もっとも代表的な引数を持ったメソッドは次のメソッドです。
Subtotal(AggregateEnum, Int32, Int32, Int32, String)
引数は5つで、それぞれ次の値を指定します。
Subtotalメソッドの書式
Public Sub Subtotal ( _ aggType As AggregateEnum, _ level As Integer, _ groupOn As Integer, _ totalOn As Integer, _ caption As String _ )
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列挙体のメンバを指定します。
メンバ | 機能 |
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 に基づく式を使用)。 |
各引数は、値をそのまま指定しても構いませんが、名前付き引数を使うこともできます。
C1FlexGrid1.Subtotal(agree_enum, level:=-1, groupOn:=-1, totalOn:=3, caption:="総計")
c1FlexGrid1.Subtotal(agree_enum, level:-1, groupOn:-1, totalOn:3, caption:"総計");
Visual BasicとC#で少し書式が違いますので注意してください。
小計行のスタイルとアウトラインツリー表示
Subtotalメソッドによって小計行が追加されると、その行には自動的に小計行用のスタイルが割り当てられます。
設計時にスタイルエディタを使用するか、もしくは実行時にコードを使用してアウトラインスタイルのプロパティを変更すると、小計行の外観をカスタマイズできます。
また、CellStyleクラスを使用してグリッドのセルスタイルを変更することで、独自のスタイルを作成することもできます。このCellStyleクラスには、CellStyleEnum列挙体のメンバを使用して5レベルまでの小計行用の組み込みスタイルを使うこともできます。
ツリー表示を行う際の、階層を結ぶラインやシンボルの表示についてもカスタマイズすることができます。これらは、グリッド内のアウトラインツリーの位置と外観を制御するGridTreeクラスを使用します。
GridTreeクラスのStyleプロパティは、アウトラインツリーのスタイルを取得または設定するプロパティで、引数にTreeStyleFlags列挙体のメンバを指定することで、アウトラインツリーの表示/非表示や折りたたみ記号、ツリー線の表示/非表示を設定することができます。
次のコードは、アウトラインツリーに折りたたみ記号とツリー線を表示するように設定します。
C1FlexGrid1.Tree.Style = TreeStyleFlags.SimpleLeaf
c1FlexGrid1.Tree.Style = TreeStyleFlags.SimpleLeaf;
メンバ名 | 説明 |
None | アウトラインツリーを表示しません。 |
Lines | ノード行の横にツリーの線を表示します。 |
Symbols | ノード行に展開/折りたたみ記号を表示します。 |
ButtonBar | 上端の固定行にアウトラインボタンを並べて表示します。 |
Leaf | すべての行(ノードとデータ)の横にツリーの線を表示します。 |
Complete | Lines、Symbols、およびButtonBarの組み合わせ。 |
Simple | LinesおよびSymbolsの組み合わせ。 |
CompleteLeaf | Lines、Symbols、ButtonBar、およびLeafの組み合わせ。 |
SimpleLeaf | Lines、Symbols、およびLeafの組み合わせ。 |