小計実行の処理
小計を実行するには、作成したプロシージャ(メソッド)「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が対応するデータベースであればどんなデータベースでもグリッドに読み込み小計を追加することができます。
