SHOEISHA iD

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

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

ComponentZine(ComponentOne)

SQL Serverのデータをグリッドで表示するWPFアプリケーションの作成 その2

ComponentOne Studio Enterprise 2011JのC1FlexGridコントロールを使ったWPFアプリケーションの作成

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

グループ集計

 C1FlexGridコントロールでは、データをグループ化すると、グループごとに列単位でデータの集計ができます。この機能もとても簡単で、集計する列の「GroupAggregate」プロパティを設定するだけでC1FlexGridコントロールが自動的に集計を計算して表示してくれます。データを変更すると、集計結果も自動的に再計算されます。

 GroupAggregateプロパティの設定値はAggregate列挙体のメンバで、以下の集計を行うことができます。

Aggregate列挙体
メンバ名 説明
None 集計なし
Sum グループ内のすべての値の合計を返す
Count グループ内のnull以外の数を返す
Average グループ内のnull以外のセルの平均値を返す
Maximum グループ内の最大値を返す
Minimum グループ内の最小値を返す
Range グループ内の最大値と最小値の差を返す
Std グループ内の値の標本標準偏差を返す(n-1に基づく式を使用)
Var グループ内の値の標本分散を返す(n-1に基づく式を使用)
StdPop グループ内の値の母標準偏差を返す(nに基づく式を使用)
VarPop グループ内の値の母分散を返す(nに基づく式を使用)

 今回は、グループ化したカテゴリ名ごとに価格の合計金額を算出するため、操作対象に「Columns("ListPrice")」を指定し、GroupAggregateプロパティに「Aggregate.Sum」を指定します。集計結果はグループヘッダ行に表示されるため、集計を表示するにはC1FlexGridコントロールの「AreGroupHeadersFrozen」プロパティを「false」に設定しておきます。

Visual Basic
Private Sub CheckBox3_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox3.Checked
    .....
    .....
    'カテゴリ毎に価格の合計を集計
    C1FlexGrid1.AreRowGroupHeadersFrozen = False
    C1FlexGrid1.Columns("ListPrice").GroupAggregate = Aggregate.Sum
C#
private void checkBox3_Checked(object sender, RoutedEventArgs e)
{
    .....
    .....
    //カテゴリ毎に価格の合計を集計
    C1FlexGrid1.AreRowGroupHeadersFrozen = false;
    C1FlexGrid1.Columns["ListPrice"].GroupAggregate = Aggregate.Sum;

 グループ集計を解除するには、GroupAggregateプロパティに「Aggregate.None」を指定します。

カテゴリ名ごとに価格の合計金額を集計し表示する
カテゴリ名ごとに価格の合計金額を集計し表示する
Visual Basic
Private Sub CheckBox3_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox3.Checked
    '現在のグループ化を一度解除
    view.GroupDescriptions.Clear()
    CheckBox1.IsChecked = False

    '改めて価格でグループ化
    view.GroupDescriptions.Add(New PropertyGroupDescription("CategoryName"))

    'カテゴリ毎に価格の合計を集計
    C1FlexGrid1.AreRowGroupHeadersFrozen = False
    C1FlexGrid1.Columns("ListPrice").GroupAggregate = Aggregate.Sum
End Sub

Private Sub CheckBox3_Unchecked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox3.Unchecked
    'グループ集計を解除
    C1FlexGrid1.Columns("ListPrice").GroupAggregate = Aggregate.None

    'グループ化を解除
    view.GroupDescriptions.Clear()
    CheckBox1.IsChecked = False
End Sub
C#
private void checkBox3_Checked(object sender, RoutedEventArgs e)
{
    //現在のグループ化を一度解除
    view.GroupDescriptions.Clear();
    CheckBox1.IsChecked = false;

    //改めて価格でグループ化
    view.GroupDescriptions.Add(new PropertyGroupDescription("CategoryName"));

    //カテゴリ毎に価格の合計を集計
    C1FlexGrid1.AreRowGroupHeadersFrozen = false;
    C1FlexGrid1.Columns["ListPrice"].GroupAggregate = Aggregate.Sum;
}

private void checkBox3_Unchecked(object sender, RoutedEventArgs e)
{
    //グループ集計を解除
    C1FlexGrid1.Columns["ListPrice"].GroupAggregate = Aggregate.None;

    //グループ化を解除
    view.GroupDescriptions.Clear();
    CheckBox1.IsChecked = false;
}

まとめ

 データベースからデータを取り出して一覧表にする場合、多くはデータを何らかの形で集計して使用します。C1FlexGridコントロールは、そのような集計機能もあらかじめ組み込まれているため、面倒なコーディングの必要は無く、すぐにその機能を使うことができます。また、複数の同じデータがあるセルを1つのセルにまとめてしまえば、表の見やすさは格段に向上します。

 データベースのフロントエンドアプリケーション開発に苦労しているのであれば、C1FlexGridコントロールの導入は大きな力になるのではないでしょうか。

参考文献

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング