PowerTools MultiRow for Windows Forms 8.0J > MultiRowの使い方 > セル型 > サマリ型セル (SummaryCell) > 条件付き集計の定義 |
サマリ型セルでは、条件に一致するセルだけを対象にして集計することができます。
集計条件に設定できる項目は次のものです。
|
集計対象行の範囲は、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)に次のセル型が配置されていることとします。
上記の設定後に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;