MESCIUS MultiRow for Windows Forms 12.0J
条件付き集計の定義

サマリ型セルでは、条件に一致するセルだけを対象にして集計することができます。
集計条件に設定できる項目は次のものです。

  • 条件付き集計の定義は、次の条件をすべて満たす場合に使用できます。
    • サマリ型セルが列フッタセクションに配置されている。
    • CalculationプロパティにMathStatisticsが設定されている。
集計対象行の指定

集計対象行の範囲は、MathStatistics.StartRowIndexプロパティおよびMathStatistics.EndRowIndexプロパティを使用して設定します。

StartRowIndexプロパティとEndRowIndexプロパティは、グリッドの上から何行目または下から何行目かを指定できます。
上から何行目かを指定する場合は、RowIndexの値を使用します。また、下から何行目かを指定する場合は、最下行を-1、下から2行目を-2・・・と負数をインデックスの値として使用します。

 

次の一覧は、StartRowIndexプロパティとEndRowIndexプロパティを設定したときの対象範囲の例です。

StartRowIndexプロパティの値 EndRowIndexプロパティの値 集計対象行の範囲
0 9 最上行から10行目までの範囲
7 -1 8行目から最下行までの範囲
-1 -10 最下行から10行目までの範囲
-6 0 下部の5行を除いた範囲

次のコードでは、上部の5行目から10行目までのNumericUpDownCell1の値の合計値を取得するサマリ型セルの設定です。

Imports GrapeCity.Win.MultiRow

Dim SummaryCell1 As New SummaryCell()

Dim statis As New MathStatistics()
statis.StatisticsType = StatisticsType.Sum

statis.StartRowIndex = 4
statis.EndRowIndex = 9

statis.CellName = "numericUpDownCell1"

SummaryCell1.Calculation = statis
using GrapeCity.Win.MultiRow;

SummaryCell summaryCell1 = new SummaryCell();

MathStatistics statis = new MathStatistics();
statis.StatisticsType = StatisticsType.Sum;

statis.StartRowIndex = 4;
statis.EndRowIndex = 9;

statis.CellName = "numericUpDownCell1";

summaryCell1.Calculation = statis;
集計条件の設定

集計条件は複数の任意のセルに対して設定できます。

例えば上記のデータに対して、次の条件をすべて満たすデータを取得できます。 

デザイナによる設定

サマリ型セルの集計条件は、設計時に専用のダイアログ画面で設定できます。

ここでは、集計条件を設定する手順について説明します。
なお、以下の説明では、テンプレートの行(Row)と列フッタ(ColumnFooterSection)に次のセル型が配置されていることとします。

売上げの合計値(ケース1)の設定

  1. summaryCell1を選択し、プロパティウィンドウで、CalculationプロパティのドロップダウンリストからMathStatisticsを選択する。
  2. Calculationプロパティの右のプラスマークをクリックし、MathStatisticsオブジェクトのプロパティを展開する。
  3. CellNameプロパティにnumericUpDownCell2を設定する。
  4. StatisticsTypeプロパティにSumを設定する。
  5. Conditionsプロパティを選択し、[...]ボタンをクリックする。
  6. 表示されたMultiRowConditionコレクションエディタで追加ボタンを押下してメンバーを追加する。
  7. 追加したメンバーを選択し、右側のプロパティでCellNameにnumericUpDownCell1を設定する。
  8. Itemsプロパティを選択し、[...]ボタンをクリックし、MultiRowConditionItemコレクションエディタを開く。
  9. 条件に「より大きい」を追加して、セル値の右側のリストからNumber(数値型)を選択し、30を設定する。
  10. 手順6-9と同じ手順で次の条件を設定する。
    条件1:
    • CellName:textBoxCell2
    • Items:'M'と等しい(セル値の右側のリストからString(文字列型)を選択)

    条件2:
    • CellName:textBoxCell3
    • Items:'大阪支社'と等しくない(セル値の右側のリストからString(文字列型)を選択)

対象データの個数(ケース2)の設定

  1. summaryCell2を選択し、プロパティウィンドウで、CalculationプロパティのドロップダウンリストからMathStatisticsを選択する。
  2. Calculationプロパティの右のプラスマークをクリックし、MathStatisticsオブジェクトのプロパティを展開する。
  3. StatisticsTypeプロパティにCountを設定する。
  4. Conditionsプロパティを選択し、[...]ボタンをクリックする。
  5. 表示されたMultiRowConditionコレクションエディタで追加ボタンを押下してメンバーを追加する。
  6. 追加したメンバーを選択し、右側のプロパティでCellNameにtextBoxCell3を設定する。
  7. Itemsプロパティを選択し、[...]ボタンをクリックし、MultiRowConditionItemコレクションエディタを開く。
  8. 条件に「と等しい」を追加し、セル値の右側のリストからString(文字列型)を選択し、'東京本社'を設定する。
  9. 条件に「と等しい」をもう1つ追加し、セル値の右側のリストからString(文字列型)を選択し、'大阪支社'を設定する。
  10. 手順5-9と同じ手順で次の条件を設定する。
    条件1:
    • CellName:textBoxCell2
    • Items:'M'と等しい(セル値の右側のリストからString(文字列型)を選択)

上記の設定後にForm1に次のコードを追加してプロジェクトを実行すると、サマリ型セルに条件に一致した集計結果が表示されます。

Imports GrapeCity.Win.MultiRow

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' データを作成する
    Dim dt As New DataTable("TEST")
    dt.Columns.Add("Emplyee", GetType(String))
    dt.Columns.Add("Age", GetType(Integer))
    dt.Columns.Add("Gender", GetType(String))
    dt.Columns.Add("Division", GetType(String))
    dt.Columns.Add("Sales", GetType(Integer))
    dt.Rows.Add("渡部 博久", 28, "M", "東京本社", 150000)
    dt.Rows.Add("中島 雄太", 47, "M", "東京本社", 240000)
    dt.Rows.Add("秋山 佳美", 34, "F", "大阪支社", 180000)
    dt.Rows.Add("佐藤 政義", 41, "M", "大阪支社", 350000)
    dt.Rows.Add("坂本 則夫", 26, "M", "大阪支社", 120000)
    dt.Rows.Add("黒田 宏則", 51, "M", "仙台支社", 100000)
    dt.Rows.Add("木村 栄一", 44, "M", "仙台支社", 200000)
    dt.Rows.Add("赤坂 美和", 35, "F", "京都支社", 160000)
    dt.Rows.Add("遠藤 保孝", 56, "M", "京都支社", 380000)
    dt.Rows.Add("小川 和義", 27, "M", "京都支社", 230000)
    dt.AcceptChanges()

    ' テンプレートを作成する
    Dim Template1 As New Template1()

    Template1.Row.Cells(0).DataField = "Emplyee"
    Template1.Row.Cells(1).DataField = "Age"
    Template1.Row.Cells(2).DataField = "Gender"
    Template1.Row.Cells(3).DataField = "Division"
    Template1.Row.Cells(4).DataField = "Sales"

    ' MultiRowを設定する
    GcMultiRow1.Template = Template1
    GcMultiRow1.AllowUserToAddRows = False
    GcMultiRow1.DataSource = dt
End Sub
using GrapeCity.Win.MultiRow;

private void Form1_Load(object sender, EventArgs e)
{
    // データを作成する
    DataTable dt = new DataTable("TEST");
    dt.Columns.Add("Emplyee", typeof(String));
    dt.Columns.Add("Age", typeof(int));
    dt.Columns.Add("Gender", typeof(String));
    dt.Columns.Add("Division", typeof(String));
    dt.Columns.Add("Sales", typeof(int));
    dt.Rows.Add("渡部 博久", 28, "M", "東京本社", 150000);
    dt.Rows.Add("中島 雄太", 47, "M", "東京本社", 240000);
    dt.Rows.Add("秋山 佳美", 34, "F", "大阪支社", 180000);
    dt.Rows.Add("佐藤 政義", 41, "M", "大阪支社", 350000);
    dt.Rows.Add("坂本 則夫", 26, "M", "大阪支社", 120000);
    dt.Rows.Add("黒田 宏則", 51, "M", "仙台支社", 100000);
    dt.Rows.Add("木村 栄一", 44, "M", "仙台支社", 200000);
    dt.Rows.Add("赤坂 美和", 35, "F", "京都支社", 160000);
    dt.Rows.Add("遠藤 保孝", 56, "M", "京都支社", 380000);
    dt.Rows.Add("小川 和義", 27, "M", "京都支社", 230000);
    dt.AcceptChanges();

    // テンプレートを作成する
    Template template1 = new Template1();

    template1.Row.Cells[0].DataField = "Emplyee";
    template1.Row.Cells[1].DataField = "Age";
    template1.Row.Cells[2].DataField = "Gender";
    template1.Row.Cells[3].DataField = "Division";
    template1.Row.Cells[4].DataField = "Sales";

    // MultiRowを設定する
    gcMultiRow1.Template = template1;
    gcMultiRow1.AllowUserToAddRows = false;
    gcMultiRow1.DataSource = dt;            
}

コードによる設定

サマリ型セルの集計条件はコードで設定することもできます。

上記の「売上げの合計値(ケース1)の設定」をコードで設定すると、次のようになります。

Imports GrapeCity.Win.MultiRow

Dim SummaryCell1 As New SummaryCell()

Dim statis As New MathStatistics()

' 集計条件を設定する
' 年齢が30歳以上
Dim conditionAge = New MultiRowCondition()
conditionAge.CellName = "numericUpDownCell1"
conditionAge.Items.Add(ConditionalCellStyleOperator.GreaterThan, 30)

' 性別が男性
Dim conditionGender As New MultiRowCondition()
conditionGender.CellName = "textBoxCell2"
conditionGender.Items.Add(ConditionalCellStyleOperator.Equals, "M")

' 所属が大阪支社
Dim conditionDicision As New MultiRowCondition()
conditionDicision.CellName = "textBoxCell3"
conditionDicision.Items.Add(ConditionalCellStyleOperator.NotEquals, "大阪支社")

statis.Conditions.Add(conditionAge)
statis.Conditions.Add(conditionGender)
statis.Conditions.Add(conditionDicision)

' 集計の対象セルを設定する
statis.CellName = "numericUpDownCell2"

SummaryCell1.Calculation = statis
using GrapeCity.Win.MultiRow;

SummaryCell summaryCell1 = new SummaryCell();

MathStatistics statis = new MathStatistics();

// 集計条件を設定する
// 年齢が30歳以上
MultiRowCondition conditionAge = new MultiRowCondition();
conditionAge.CellName = "numericUpDownCell1";
conditionAge.Items.Add(ConditionalCellStyleOperator.GreaterThan, 30);

// 性別が男性
MultiRowCondition conditionGender = new MultiRowCondition();
conditionGender.CellName = "textBoxCell2";
conditionGender.Items.Add(ConditionalCellStyleOperator.Equals, "M");

// 所属が大阪支社
MultiRowCondition conditionDicision = new MultiRowCondition();
conditionDicision.CellName = "textBoxCell3";
conditionDicision.Items.Add(ConditionalCellStyleOperator.NotEquals, "大阪支社");

statis.Conditions.Add(conditionAge);
statis.Conditions.Add(conditionGender);
statis.Conditions.Add(conditionDicision);

// 集計の対象セルを設定する
statis.CellName = "numericUpDownCell2";

summaryCell1.Calculation = statis;

上記の「対象データの個数(ケース2)の設定」をコードで設定すると、次のようになります。

Imports GrapeCity.Win.MultiRow

Dim SummaryCell1 As New SummaryCell()

Dim statis As New MathStatistics()

' 集計条件を設定する
' 性別が男性
Dim conditionGender As New MultiRowCondition()
conditionGender.CellName = "textBoxCell2"
conditionGender.Items.Add(ConditionalCellStyleOperator.Equals, "M")

' 所属が東京本社または大阪支社
Dim conditionDicision As New MultiRowCondition()
conditionDicision.CellName = "textBoxCell3"
conditionDicision.Items.Add(ConditionalCellStyleOperator.Equals, "東京本社")
conditionDicision.Items.Add(ConditionalCellStyleOperator.Equals, "大阪支社")

statis.Conditions.Add(conditionGender)
statis.Conditions.Add(conditionDicision)

' 集計の対象セルを設定する
statis.CellName = "numericUpDownCell2"

' 集計の種類を個数に設定する
statis.StatisticsType = StatisticsType.Count

SummaryCell1.Calculation = statis
using GrapeCity.Win.MultiRow;

SummaryCell summaryCell1 = new SummaryCell();

MathStatistics statis = new MathStatistics();

// 集計条件を設定する
// 性別が男性
MultiRowCondition conditionGender = new MultiRowCondition();
conditionGender.CellName = "textBoxCell2";
conditionGender.Items.Add(ConditionalCellStyleOperator.Equals, "M");

// 所属が東京本社または大阪支社
MultiRowCondition conditionDicision = new MultiRowCondition();
conditionDicision.CellName = "textBoxCell3";
conditionDicision.Items.Add(ConditionalCellStyleOperator.Equals, "東京本社");
conditionDicision.Items.Add(ConditionalCellStyleOperator.Equals, "大阪支社");

statis.Conditions.Add(conditionGender);
statis.Conditions.Add(conditionDicision);

// 集計の対象セルを設定する
statis.CellName = "numericUpDownCell2";

// 集計の種類を個数に設定する
statis.StatisticsType = StatisticsType.Count;

summaryCell1.Calculation = statis;
関連トピック

 

 


© MESCIUS inc. All rights reserved.