小計とアウトラインツリーの実行処理
データベースを読み込んだら、小計を実行する処理を作成します。
小計は全部で3種類の計算ができるようにしますので、独自のプロシージャ(メソッド)を作成し、引数にAggregateEnum列挙体のメンバを指定して計算の種類を切り替えるようにします。
小計計算の種類を切り替える処理
最初に、小計計算の種類を切り替える処理を作成します。これは、独自のプロシージャ(メソッド)「run_subtotal」を作成し、呼び出す際に引数にAggregateEnum列挙体のメンバを指定して、3種類の計算ができるようにします。
(1)小計とツリー用の列を作成します。1つは固定列で、もう一つはツリーを展開表示したときの追加の列です。これらは、あらかじめ列を用意しておくだけで、あとはC1FlexGridコントロールが自動的の操作してくれます。
(2)ツリーの展開/折りたたみ記号とツリー線を表示するように設定します。
(3)Subtotalメソッドを使用して、3つの小計を作成します。集計するデータは列「収穫量」で、1つは収穫量すべての「総計」を算出します。総計を出す場合、Subtotalメソッドの引数「level」と「groupOn」には、値「-1」を指定します。引数「level」はアウトラインツリーのレベルで「-1」を指定すると、階層レベルとは関係なく最上位に小計を作成します。
引数「groupOn」はグループ化する列番号を指定しますが、これも「-1」を指定すると全データをグループ化し小計を計算するようになります。
引数「totalOn」は、集計するデータのある列番号を指定し、「caption」は行見出しを指定する文字列です。
(4)次に、階層のトップレベルに当たる「地方名」の小計を作成します。階層レベルは「0」で、グループ化する列は「地方名」の列番号「0」、集計列は「3」のままで、行見出しにはグループ化する列名に「計」という文字を結合して作成しますので、「"{0}計"」を指定します。
2番目の階層となる「都道府県」で小計を作成します。階層レベルは「1」を指定し、グループ化する列は「都道府県名」の列番号「1」、集計列は「3」のままで、行見出しにはグループ化する列名に「計」という文字を結合して作成しますので、「"{0}計"」を指定します。
(5)そして、最初のレベルだけツリーを展開するようにShowメソッドを実行します。
Private Sub run_subtotal(ByVal agree_enum As AggregateEnum) '(1)小計とツリー用の列の作成 C1FlexGrid1.Cols.Fixed = 0 C1FlexGrid1.Tree.Column = 0 '(2)すべての行(ノードとデータ)の横にツリーの線を表示し 'ノード行に展開/折りたたみ記号を表示 C1FlexGrid1.Tree.Style = TreeStyleFlags.SimpleLeaf '(3)総計の作成 C1FlexGrid1.Subtotal(agree_enum, level:=-1, groupOn:=-1, totalOn:=3, caption:="総計") '(4)地方名で小計を作成 C1FlexGrid1.Subtotal(agree_enum, level:=0, groupOn:=0, totalOn:=3, caption:="{0}計") '都道府県名で小計を作成 C1FlexGrid1.Subtotal(agree_enum, level:=1, groupOn:=1, totalOn:=3, caption:="{0}計") '(5)最初のツリーレベルだけを展開 C1FlexGrid1.Tree.Show(1) End Sub
private void run_subtotal(AggregateEnum agree_enum) { //(1)小計とツリー用の列の作成 c1FlexGrid1.Cols.Fixed = 0; c1FlexGrid1.Tree.Column = 0; //(2)すべての行(ノードとデータ)の横にツリーの線を表示し //ノード行に展開/折りたたみ記号を表示 c1FlexGrid1.Tree.Style = TreeStyleFlags.SimpleLeaf; //(3)総計の作成 //c1FlexGrid1.Subtotal(agree_enum, -1, -1, 3, "総計") c1FlexGrid1.Subtotal(agree_enum, level:-1, groupOn:-1, totalOn:3, caption:"総計"); //(4)地方名で小計を作成 c1FlexGrid1.Subtotal(agree_enum, level:0, groupOn:0, totalOn:3, caption:"{0}計"); //都道府県名で小計を作成 c1FlexGrid1.Subtotal(agree_enum, level:1, groupOn:1, totalOn:3, caption:"{0}計"); //(5)最初のツリーレベルだけを展開 c1FlexGrid1.Tree.Show(1); }