SHOEISHA iD

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

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

ComponentZine(ComponentOne)

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

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

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

小計実行の処理

 小計を実行するには、作成したプロシージャ(メソッド)「run_subtotal」の引数に、計算の種類を指定するAggregateEnum列挙体のメンバを設定し、メソッドを実行します。どの計算を実行するのかは、選択されたRadioButtonコントロールによって切り替えます。

 「合計」「平均」「対総計比」それぞれ、計算結果の桁数が違いますからセルの書式を設定します。特に実数となる「平均」「対総計比」は、小数点の桁数を指定しておかないとデータが分かりづらくなります。

 セルの書式は、Colsプロパティに列番号を指定し、Formatプロパティに書式を指定します。書式指定は、.NET Frameworkの書式指定に従います。

 そして、その桁数に合わせて列幅を自動調節するように、AutoSizeColsメソッドを実行します。

 これで、「小計を実行」ボタンをクリックすると、ラジオボタンで選択された小計が実行され、グリッドに小計が挿入されます。

Visual Basic
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
C#
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メソッドを実行すれば、展開・縮小後にそれぞれの列幅が自動調整されます。

Visual Basic
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
C#
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が対応するデータベースであればどんなデータベースでもグリッドに読み込み小計を追加することができます。

参考資料(サンプルデータ)

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング