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

文書番号 : 26886     文書種別 : 使用方法     最終更新日 : 2009/11/17
文書を印刷する
対象製品
MultiRow for Windows Forms 5.0J
詳細
1. ループを使用する
アンバウンドモードでは、ループを使用してセルの値を集計します。

[Visual Basic]
Imports GrapeCity.Win.MultiRow

' サンプルデータ
Me.GcMultiRow1.AllowUserToAddRows = False
Me.GcMultiRow1.RowCount = 10
Me.GcMultiRow1.Rows(0).Visible = False
Me.GcMultiRow1.Rows(1).Visible = False

For index As Integer = 1 To 10
  Me.GcMultiRow1.SetValue(index - 1, 0, index)
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.AllowUserToAddRows = false;
this.gcMultiRow1.RowCount = 10;
this.gcMultiRow1.Rows[0].Visible = false;
this.gcMultiRow1.Rows[1].Visible = false;

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

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);

2. LINQ を使用する
Visual Studio 2008 と .NET Framework 3.5 を使用できる環境では、LINQ によって合計を取得できます。

[Visual Basic]
Imports GrapeCity.Win.MultiRow

' サンプルデータ
Me.GcMultiRow1.AllowUserToAddRows = False
Me.GcMultiRow1.RowCount = 10
Me.GcMultiRow1.Rows(0).Visible = False
Me.GcMultiRow1.Rows(1).Visible = False

For index As Integer = 1 To 10
  Me.GcMultiRow1.SetValue(index - 1, 0, index)
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.AllowUserToAddRows = false;
this.gcMultiRow1.RowCount = 10;
this.gcMultiRow1.Rows[0].Visible = false;
this.gcMultiRow1.Rows[1].Visible = false;

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

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);

データベースにバウンドしている場合は、データソースの計算列(DataColumn.Expression)を使用できる場合があります。

次期バージョン MultiRow for Windows Forms 6.0J では、新たに SummaryCell が提供されています。SummaryCell を使用すると、アンバウンドモードでもセルの値の集計が可能になります。

この文書は、以前は次のFAQ IDで公開されていました : 11727