作成日: 2022/10/07 最終更新日: 2022/10/07
文書種別
使用方法
詳細
表の上下で同じデータが続く場合、2番目以降のデータや下線を非表示にするため、VBScriptを使用することができます。
(サンプルデータ)

(1)レポート定義ファイルにVBScriptを設定する方法
レポートデザイナでレポート定義ファイルを開き、レポートのOnOpenプロパティおよびDetailセクションのOnFormatプロパティに、以下のVBスクリプトを設定します。
※レポート定義ファイルには、詳細セクション次のようなフィールドが配置されている事を想定しています。
・データバインド用フィールド
Field1、Field2
・下線表示用フィールド
Field3(Field1の真上に配置、高さ=0、Borderプロパティに実線を設定)
Field4(Field2の真上に配置、高さ=0、Borderプロパティに実線を設定)
■VBScriptの設定
◇レポートのOnOpenプロパティ
◇Detail OnFormatプロパティ
(2)コードでVBScriptを設定する方法
実行時にVBScriptを設定するには、以下のようなコードを使用します。
※レポートデザイナで、(1)と同じ4つのフィールドを詳細セクションに配置したレポート定義ファイル(Test01.flxr)を作成し、事前にプロジェクトフォルダにコピーしておきます。
◎サンプルコード(VB)
(サンプルデータ)
----------------------------
101 納入商品 A
----------------------------
101 納入商品 B
----------------------------
101 納入商品 C
(1)レポート定義ファイルにVBScriptを設定する方法
レポートデザイナでレポート定義ファイルを開き、レポートのOnOpenプロパティおよびDetailセクションのOnFormatプロパティに、以下のVBスクリプトを設定します。
※レポート定義ファイルには、詳細セクション次のようなフィールドが配置されている事を想定しています。
・データバインド用フィールド
Field1、Field2
・下線表示用フィールド
Field3(Field1の真上に配置、高さ=0、Borderプロパティに実線を設定)
Field4(Field2の真上に配置、高さ=0、Borderプロパティに実線を設定)
■VBScriptの設定
◇レポートのOnOpenプロパティ
cName = ""
◇Detail OnFormatプロパティ
cName_org = ColumnA
If ColumnA = cName Then
Field1.Value = ""
Field3.Visible = False
Else
Field1.Value = cName_org
Field3.Visible = True
EndIf
cName = ColumnA
(2)コードでVBScriptを設定する方法
実行時にVBScriptを設定するには、以下のようなコードを使用します。
※レポートデザイナで、(1)と同じ4つのフィールドを詳細セクションに配置したレポート定義ファイル(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()
' データソースの設定(1)
C1FlexReport1.DataSource.Recordset = dt
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"列をバインド
' 下線の表示・非表示
Dim script1 As String = "cName = """""
C1FlexReport1.OnOpen = script1
Dim script2 As String = "cName_org = ColumnA" & vbCrLf &
"If ColumnA = cName Then" & vbCrLf &
" Field1.Value = """"" & vbCrLf &
" Field3.Visible = False" & vbCrLf &
"Else" & vbCrLf &
" Field1.Value = cName_org" & vbCrLf &
" Field3.Visible = True" & vbCrLf &
"EndIf" & vbCrLf &
"cName = ColumnA"
C1FlexReport1.Sections.Detail.OnFormat = script2
' プレビュー表示
C1FlexReport1.Render()
C1FlexViewer1.DocumentSource = C1FlexReport1
End Sub
Private Function GetMyDataTable() As DataTable
Dim dt As DataTable = New DataTable
dt.Columns.Add("ColumnA", GetType(String))
dt.Columns.Add("ColumnB", GetType(String))
For i As Integer = 0 To 19 Step 3
dt.Rows.Add((i + 101).ToString(), "納入商品 " + ChrW(65 + i).ToString())
dt.Rows.Add((i + 101).ToString(), "納入商品 " + ChrW(66 + i).ToString())
dt.Rows.Add((i + 101).ToString(), "納入商品 " + ChrW(67 + i).ToString())
Next
dt.AcceptChanges()
Return dt
End Function
End Class
◎サンプルコード(C#)
using System.Windows.Forms;
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 tField1 = (TextField)c1FlexReport1.Sections.Detail.Fields["Field1"];
tField1.Text = "=ColumnA"; //"ColumnA"列をバインド
TextField tField2 = (TextField)c1FlexReport1.Sections.Detail.Fields["Field2"];
tField2.Text = "=ColumnB"; //"ColumnB"列をバインド
// 下線の表示・非表示
string script1 = "cName = \"\"";
c1FlexReport1.OnOpen = script1;
string script2 = "cName_org = ColumnA" + "\r\n" + "If ColumnA = cName Then" + "\r\n" +
" Field1.Value = \"\"" + "\r\n" +
" Field3.Visible = False" + "\r\n" +
"Else" + "\r\n" +
" Field1.Value = cName_org" + "\r\n" +
" Field3.Visible = True" + "\r\n" +
"EndIf" + "\r\n" +
"cName = ColumnA";
c1FlexReport1.Sections.Detail.OnFormat = script2;
// プレビュー表示
c1FlexReport1.Render();
c1FlexViewer1.DocumentSource = c1FlexReport1;
}
DataTable GetMyDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("ColumnA", typeof(String));
dt.Columns.Add("ColumnB", typeof(String));
for (int i = 0; i < 10; i=i+2)
{
dt.Rows.Add((i + 101).ToString(), "納入商品 " + ((char)(65 + i)).ToString());
dt.Rows.Add((i + 101).ToString(), "納入商品 " + ((char)(66 + i)).ToString());
}
dt.AcceptChanges();
return dt;
}
}
}