表示されているセルの値の合計を取得するには?
対象製品
MultiRow for Windows Forms 5.0J
詳細
1. ループを使用する
アンバウンドモードでは、ループを使用してセルの値を集計します。
[Visual Basic]
[C#]
2. LINQ を使用する
Visual Studio 2008 と .NET Framework 3.5 を使用できる環境では、LINQ によって合計を取得できます。
[Visual Basic]
[C#]
データベースにバウンドしている場合は、データソースの計算列(DataColumn.Expression)を使用できる場合があります。
次期バージョン MultiRow for Windows Forms 6.0J では、新たに SummaryCell が提供されています。SummaryCell を使用すると、アンバウンドモードでもセルの値の集計が可能になります。
アンバウンドモードでは、ループを使用してセルの値を集計します。
[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)
' サンプルデータ
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);
// サンプルデータ
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)
' サンプルデータ
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);
// サンプルデータ
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
Console.WriteLine("平均: {0}", average);
データベースにバウンドしている場合は、データソースの計算列(DataColumn.Expression)を使用できる場合があります。
次期バージョン MultiRow for Windows Forms 6.0J では、新たに SummaryCell が提供されています。SummaryCell を使用すると、アンバウンドモードでもセルの値の集計が可能になります。
この文書は、以前は次のFAQ IDで公開されていました : 11727