小計実行の処理
小計を実行するには、作成したプロシージャ(メソッド)「run_subtotal」の引数に、計算の種類を指定するAggregateEnum列挙体のメンバを設定し、メソッドを実行します。どの計算を実行するのかは、選択されたRadioButtonコントロールによって切り替えます。
「合計」「平均」「対総計比」それぞれ、計算結果の桁数が違いますからセルの書式を設定します。特に実数となる「平均」「対総計比」は、小数点の桁数を指定しておかないとデータが分かりづらくなります。
セルの書式は、Colsプロパティに列番号を指定し、Formatプロパティに書式を指定します。書式指定は、.NET Frameworkの書式指定に従います。
そして、その桁数に合わせて列幅を自動調節するように、AutoSizeColsメソッドを実行します。
これで、「小計を実行」ボタンをクリックすると、ラジオボタンで選択された小計が実行され、グリッドに小計が挿入されます。
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click '一度小計をクリア C1FlexGrid1.Subtotal(AggregateEnum.Clear) '合計の小計を実行 If RadioButton1.Checked = True Then run_subtotal(AggregateEnum.Sum) C1FlexGrid1.Cols(3).Format = "0" End If '平均値の小計を実行 If RadioButton2.Checked = True Then run_subtotal(AggregateEnum.Average) C1FlexGrid1.Cols(3).Format = "##.##" End If '対総計比の小計を実行 If RadioButton3.Checked = True Then run_subtotal(AggregateEnum.Percent) C1FlexGrid1.Cols(3).Format = "0.#" End If '列幅を内容に合わせる C1FlexGrid1.AutoSizeCols() End Sub
private void button2_Click(object sender, EventArgs e) { //一度小計をクリア c1FlexGrid1.Subtotal(AggregateEnum.Clear); //合計の小計を実行 if(radioButton1.Checked==true) { run_subtotal(AggregateEnum.Sum); c1FlexGrid1.Cols[3].Format = "0"; } //平均値の小計を実行 if(radioButton2.Checked == true) { run_subtotal(AggregateEnum.Average); c1FlexGrid1.Cols[3].Format = "##.##"; } //対総計比の小計を実行 if(radioButton3.Checked == true) { run_subtotal(AggregateEnum.Percent); c1FlexGrid1.Cols[3].Format = "0.#"; } //列幅を内容に合わせる c1FlexGrid1.AutoSizeCols(); }
小計の削除とツリーの展開・縮小に合わせた列幅の自動調整
最後に、小計を削除し元のグリッドに戻す処理を行います。これは、Subtotalメソッドに引数「AggregateEnum.Clear」を指定して実行するだけです。
そして、ツリーの展開・縮小のたびに列幅の自動調整を行う処理を作成します。これは、C1FlexGridコントロールの「AfterCollapse」イベントで行います。
「AfterCollapse」イベントは、ツリーの展開・縮小が行われた後に発生するイベントです。このイベントハンドラでAutoSizeColsメソッドを実行すれば、展開・縮小後にそれぞれの列幅が自動調整されます。
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click '小計をクリアし元のテーブルに戻す C1FlexGrid1.Subtotal(AggregateEnum.Clear) End Sub Private Sub C1FlexGrid1_AfterCollapse(sender As System.Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.AfterCollapse 'ツリーの展開・縮小のたびに列幅の自動調整を行う C1FlexGrid1.AutoSizeCols() End Sub
private void button3_Click(object sender, EventArgs e) { //小計をクリアし元のテーブルに戻す c1FlexGrid1.Subtotal(AggregateEnum.Clear); } private void c1FlexGrid1_AfterCollapse(object sender, RowColEventArgs e) { //ツリーの展開・縮小のたびに列幅の自動調整を行う c1FlexGrid1.AutoSizeCols(); }
まとめ
C1FlexGridコントロールの自動小計機能とアウトラインツリー表示は、データをすっきりとまとめ、ユーザーに見やすいグリッドを提供します。
小計のレベルも階層状に深くすることができるので、データを全体からより詳細な集計までカバーすることができ、データ分析にも役に立ちます。
今回もAccessのデータベースを対象にアプリケーションを作成しましたが、ADO.NETが対応するデータベースであればどんなデータベースでもグリッドに読み込み小計を追加することができます。