作成日: 2022/10/12 最終更新日: 2022/10/12
文書種別
使用方法
詳細
各グループのデータの合計値は、VBScriptのSum関数を用いて計算することができます。
一方、詳細データの累計を計算するには、手動で、DetailセクションのOnFormatにてデータ値を順次追加する必要があります。
例として、グループヘッダーに合計値を、詳細セクションに数量および累計を表示した場合の、結果を示す画像およびその設定手順を紹介します。

(1) レポートデザイナでの設定
※参考までに、下記設定を行ったレポート定義ファイル(Test01.flxr)を本ナレッジに添付していますので、ご参照ください。
◇グループ化の設定
デザインタブの「並べ替え/グループ化」をクリックし、グループを追加して、そのBroupByプロパティに"grpName"を設定します。
◇グループの合計の設定
グループヘッダーに合計値表示用のTextField(名前:Fielf4)を配置し、Textプロパティに以下を設定します。
◇累計の設定
詳細セクションに数値および累計表示用TextField(名前:Fielf2, Field3)を配置し、以下に示すように、OnOpen、OnFormatプロパティにVBScriptを設定します。
・レポートのOnOpen
(2) コードでの設定
◇データソース(DataTable)の構造
・追加する列の名前
"grpName":グループ名
"ColumnA":データの名前
"ColumnB":データの値
◇レポートの読み込み、データの設定、プレビュー
以下のコードを設定します。
※事前に、(1)の内容を持つレポート定義ファイル(Test01.flxr)を作成し、プロジェクトフォルダにコピーしておきます。
◎サンプルコード(VB)
一方、詳細データの累計を計算するには、手動で、DetailセクションのOnFormatにてデータ値を順次追加する必要があります。
例として、グループヘッダーに合計値を、詳細セクションに数量および累計を表示した場合の、結果を示す画像およびその設定手順を紹介します。
(1) レポートデザイナでの設定
※参考までに、下記設定を行ったレポート定義ファイル(Test01.flxr)を本ナレッジに添付していますので、ご参照ください。
◇グループ化の設定
デザインタブの「並べ替え/グループ化」をクリックし、グループを追加して、そのBroupByプロパティに"grpName"を設定します。
◇グループの合計の設定
グループヘッダーに合計値表示用のTextField(名前:Fielf4)を配置し、Textプロパティに以下を設定します。
=Sum([ColumnB])
◇累計の設定
詳細セクションに数値および累計表示用TextField(名前:Fielf2, Field3)を配置し、以下に示すように、OnOpen、OnFormatプロパティにVBScriptを設定します。
・レポートのOnOpen
_numCount = 0
・DetailセクションのOnFormat_numCount = _numCount + ColumnB
Field3 = _numCount
・GroupFooterのOnFormat_numCount = 0
(2) コードでの設定
◇データソース(DataTable)の構造
・追加する列の名前
"grpName":グループ名
"ColumnA":データの名前
"ColumnB":データの値
◇レポートの読み込み、データの設定、プレビュー
以下のコードを設定します。
※事前に、(1)の内容を持つレポート定義ファイル(Test01.flxr)を作成し、プロジェクトフォルダにコピーしておきます。
◎サンプルコード(VB)
Imports C1.Win.FlexReport
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' レポートの読み込み、データソースの設定
C1FlexReport1.Load("..\..\Test01.flxr", "レポート 1")
Dim dt As DataTable = GetMyDataTable()
C1FlexReport1.DataSource.Recordset = dt
' TextFieldの設定
Dim tField1 As TextField = CType(C1FlexReport1.Sections.Detail.Fields("Field1"), TextField)
tField1.Text = "=ColumnA" '"ColumnA"列をバインド
Dim tField2 As TextField = CType(C1FlexReport1.Sections.Detail.Fields("Field2"), TextField)
tField2.Text = "=ColumnB" '"ColumnB"列をバインド
' プレビュー表示
C1FlexReport1.Render()
C1FlexViewer1.DocumentSource = C1FlexReport1
End Sub
Private Function GetMyDataTable() As DataTable
Dim dt As DataTable = New DataTable()
dt.Columns.Add("grpName", GetType(String))
dt.Columns.Add("ColumnA", GetType(String))
dt.Columns.Add("ColumnB", GetType(Integer))
For j As Integer = 0 To 9
For i As Integer = 0 To 4
dt.Rows.Add("グループ" + (ChrW(65 + j)).ToString(), (ChrW(65 + j)) + (i + 1).ToString(), (j * 5 + i + 1).ToString())
Next
Next
dt.AcceptChanges()
Return dt
End Function
End Class
◎サンプルコード(C#)
using C1.Win.FlexReport;
namespace prj_FlexReport
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// レポートの読込み、データソースの設定
c1FlexReport1.Load(@"..\..\Test01.flxr", "レポート 1");
DataTable dt = GetMyDataTable();
c1FlexReport1.DataSource.Recordset = dt;
// TextFieldの設定
TextField tField1 = (TextField)c1FlexReport1.Sections.Detail.Fields["Field1"];
tField1.Text = "=ColumnA"; //"ColumnA"列をバインド
TextField tField2 = (TextField)c1FlexReport1.Sections.Detail.Fields["Field2"];
tField2.Text = "=ColumnB"; //"ColumnB"列をバインド
// プレビュー表示
c1FlexReport1.Render();
c1FlexViewer1.DocumentSource = c1FlexReport1;
}
DataTable GetMyDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("grpName", typeof(String));
dt.Columns.Add("ColumnA", typeof(String));
dt.Columns.Add("ColumnB", typeof(Int32));
for (int j = 0; j < 10; j++)
{
for (int i = 0; i < 5; i++)
{
dt.Rows.Add("グループ" + (char)(65 + j), (char)(65 + j) + (i+1).ToString(), (j * 5 + i + 1).ToString());
}
}
dt.AcceptChanges();
return dt;
}
}
}