表示されているセルの値の合計を取得するには?

文書番号 : 40549     文書種別 : 使用方法     登録日 : 2017/07/26     最終更新日 : 2017/07/26
文書を印刷する
対象製品
MultiRow for Windows Forms 10.0J
詳細
セルの値の合計を取得するとき、非表示の行を除外するにはいくつかの方法があります。

サマリ型セルを使用する
フッタにサマリ型セルを配置して合計を表示します。非表示の行はサマリ型セルのオプションで除外指定できます。

[Visual Basic]
Imports GrapeCity.Win.MultiRow

Me.GcMultiRow1.AllowUserToAddRows = False

Dim template1 As Template = Template.Default
Dim columnFooterSection1 As New ColumnFooterSection
Dim summaryCell1 As New SummaryCell()
summaryCell1.Calculation = New MathStatistics(StatisticsType.Sum, 0, True)
columnFooterSection1.Cells.Add(summaryCell1)
template1.ColumnFooters.Add(columnFooterSection1)
Me.GcMultiRow1.Template = template1

Me.GcMultiRow1.RowCount = 10

For index As Integer = 0 To GcMultiRow1.RowCount - 1
    Me.GcMultiRow1.SetValue(index, 0, index + 1)
Next

Me.GcMultiRow1.Rows(0).Visible = False
Me.GcMultiRow1.Rows(1).Visible = False

[C#]
this.gcMultiRow1.AllowUserToAddRows = false;
Template template1 = Template.Default;
ColumnFooterSection columnFooterSection1 = new ColumnFooterSection();
SummaryCell summaryCell1 = new SummaryCell();
summaryCell1.Calculation = new MathStatistics(StatisticsType.Sum, 0, true);
columnFooterSection1.Cells.Add(summaryCell1);
template1.ColumnFooters.Add(columnFooterSection1);
this.gcMultiRow1.Template = template1;

this.gcMultiRow1.RowCount = 10;

for (int i = 0; i < this.gcMultiRow1.RowCount; i++)
{
    this.gcMultiRow1.SetValue(i, 0, i + 1);
}

this.gcMultiRow1.Rows[0].Visible = false;
this.gcMultiRow1.Rows[1].Visible = false;

ループを使用する
ループを使用してセルの値を集計します。

[Visual Basic]
Imports GrapeCity.Win.MultiRow

Me.GcMultiRow1.Template = Template.Default
Me.GcMultiRow1.AllowUserToAddRows = False
Me.GcMultiRow1.RowCount = 10
Me.GcMultiRow1.Rows(0).Visible = False
Me.GcMultiRow1.Rows(1).Visible = False

For index As Integer = 0 To GcMultiRow1.RowCount - 1
    Me.GcMultiRow1.SetValue(index, 0, index + 1)
Next

Dim sum As Integer = 0
For index As Integer = 0 To Me.GcMultiRow1.RowCount - 1
    If Me.GcMultiRow1.Rows.GetRowState(index) And MultiRowElementStates.Visible = MultiRowElementStates.Visible Then
        sum += Me.GcMultiRow1.GetValue(index, 0)
    End If
Next

Console.WriteLine("表示行の合計: {0}", sum)

[C#]
using GrapeCity.Win.MultiRow;

this.gcMultiRow1.Template = Template.Default;
this.gcMultiRow1.AllowUserToAddRows = false;
this.gcMultiRow1.RowCount = 10;
this.gcMultiRow1.Rows[0].Visible = false;
this.gcMultiRow1.Rows[1].Visible = false;

for (int i = 0; i < this.gcMultiRow1.RowCount; i++)
{
    this.gcMultiRow1.SetValue(i, 0, i + 1);
}

int sum = 0;
for (int i = 0; i < this.gcMultiRow1.RowCount; i++)
{
    if ((this.gcMultiRow1.Rows.GetRowState(i) & MultiRowElementStates.Visible) == MultiRowElementStates.Visible)
    {
        sum += (int)this.gcMultiRow1.GetValue(i, 0);
    }
}

Console.WriteLine("合計: {0}", sum);

LINQの使用
LINQを使用して合計を取得することができます。

[Visual Basic]
Imports GrapeCity.Win.MultiRow

Me.GcMultiRow1.Template = Template.Default
Me.GcMultiRow1.AllowUserToAddRows = False
Me.GcMultiRow1.RowCount = 10
Me.GcMultiRow1.Rows(0).Visible = False
Me.GcMultiRow1.Rows(1).Visible = False

For index As Integer = 0 To GcMultiRow1.RowCount - 1
    Me.GcMultiRow1.SetValue(index, 0, index + 1)
Next

' 合計
Dim visibleRows = Me.GcMultiRow1.Rows.Where(Function(row) row.Visible)
Console.WriteLine("表示されている行数: {0}", visibleRows.Count)
Dim cellValues = visibleRows.Select(Of Integer)(Function(row) row.Cells(0).Value)
Dim sum = cellValues.Sum()
Console.WriteLine("合計: {0}", sum)

' 平均
Dim average = Me.GcMultiRow1.Rows.Where(Function(row) Row.Visible).Select(Of Integer)(Function(row) row.Cells(0).Value).Average()
Console.WriteLine("平均: {0}", average)


[C#]
using GrapeCity.Win.MultiRow;

this.gcMultiRow1.Template = Template.Default;
this.gcMultiRow1.AllowUserToAddRows = false;
this.gcMultiRow1.RowCount = 10;
this.gcMultiRow1.Rows[0].Visible = false;
this.gcMultiRow1.Rows[1].Visible = false;

for (int i = 0; i < this.gcMultiRow1.RowCount; i++)
{
    this.gcMultiRow1.SetValue(i, 0, i + 1);
}

var visibleRows = this.gcMultiRow1.Rows.Where(row => row.Visible);
Console.WriteLine("表示されている行数: {0}", visibleRows.Count());
var cellValues = visibleRows.Select<Row, int>(row => (int)row.Cells[0].Value);
var sum = cellValues.Sum();
Console.WriteLine("合計: {0}", sum);

var average = this.gcMultiRow1.Rows.Where(row => row.Visible).Select(row => (int)row.Cells[0].Value).Average();
Console.WriteLine("平均: {0}", average);