作成日: 2022/11/30 最終更新日: 2022/11/30
文書種別
使用方法
詳細
1行おきの背景色を持つレポートを作成するには、VBScriptで行数をカウントし、それに応じて背景色を変更します。以下に、1行おきの背景色を持つ手書き用の複写伝票を作成する方法を紹介します。

まずFlexReportデザイナで、ヘッダーにタイトルや合計金額用のTextFieldを、詳細セクションにTextFieldを1つ(単価、数量、個別金額などを表示するため)配置したテンプレート用レポートを作成します。

※本ナレッジに、テンプレート用レポートファイル(Test01.flxr)を添付しますので、ご参照ください。
次いで、新規のVisual Studioプロジェクトを作成し、下記のようなコードを用いて、詳細行に1行おきの背景色を設定するためのVBScriptを設定します。
◎サンプルコード(VB)
まずFlexReportデザイナで、ヘッダーにタイトルや合計金額用のTextFieldを、詳細セクションにTextFieldを1つ(単価、数量、個別金額などを表示するため)配置したテンプレート用レポートを作成します。
※本ナレッジに、テンプレート用レポートファイル(Test01.flxr)を添付しますので、ご参照ください。
次いで、新規のVisual Studioプロジェクトを作成し、下記のようなコードを用いて、詳細行に1行おきの背景色を設定するためのVBScriptを設定します。
◎サンプルコード(VB)
Imports C1.Win.FlexReport
Public Class Form1
Dim rpPage As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 伝票情報
rpPage = 18
Dim title As String = "領 収 書"
Dim fColor As Color = Color.LightSkyBlue
' レポートの読み込み
C1FlexReport1.Load("..\..\Test01.flxr", "レポート 1")
' データの設定
Dim dt As DataTable = GetMyDataTable()
C1FlexReport1.DataSource.Recordset = dt
' 1ページに表示する行数の設定
C1FlexReport1.RecordsPerPage = rpPage
' TextField(詳細行)の設定
Dim tField1 As TextField = CType(C1FlexReport1.Sections.Detail.Fields("Field1"), TextField)
tField1.Text = "=ColumnA"
' TextField(タイトル)の設定
Dim tField2 As TextField = CType(C1FlexReport1.Sections.Header.Fields("Field2"), TextField)
tField2.Text = title
' テキストフィールドの背景色の設定
tField2.BackColor = fColor
CType(C1FlexReport1.Sections.Header.Fields("Field91"), TextField).BackColor = fColor
CType(C1FlexReport1.Sections.Header.Fields("Field92"), TextField).BackColor = fColor
CType(C1FlexReport1.Sections.Footer.Fields("Field93"), TextField).BackColor = fColor
CType(C1FlexReport1.Sections.Footer.Fields("Field94"), TextField).BackColor = fColor
CType(C1FlexReport1.Sections.Footer.Fields("Field95"), TextField).BackColor = fColor
' VBScriptの設定(1行おきの背景色)
Dim script1 As String = "cnt = 0"
C1FlexReport1.OnOpen = script1
Dim script2 As String = "If cnt mod 2 = 0 Then" + vbCrLf +
"Field1.BackColor = ""White""" + vbCrLf +
"Else" + vbCrLf +
"Field1.BackColor = ""LightGray""" + vbCrLf +
"EndIf" + vbCrLf +
"cnt = cnt + 1"
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))
For i As Integer = 0 To rpPage - 1
dt.Rows.Add(" ")
Next
dt.AcceptChanges()
Return dt
End Function
End Class
◎サンプルコード(C#)
using C1.Win.FlexReport;
namespace prj_FlexReport
{
public partial class Form1 : Form
{
int rpPage;
public Form1()
{
InitializeComponent();
// 伝票情報
rpPage = 18; // 1ページに表示する行数
String title = "領 収 書";
Color fColor = Color.LightSkyBlue;
// レポートの読み込み
c1FlexReport1.Load(@"..\..\Test01.flxr", "レポート 1");
// データの設定
DataTable dt = GetMyDataTable();
c1FlexReport1.DataSource.Recordset = dt;
// 1ページに表示する行数の設定
c1FlexReport1.RecordsPerPage = rpPage;
// TextField(詳細行)の設定
TextField tField1 = (TextField)c1FlexReport1.Sections.Detail.Fields["Field1"];
tField1.Text = "=ColumnA"; //"ColumnA"列をバインド
// TextField(タイトル)の設定
TextField tField2 = (TextField)c1FlexReport1.Sections.Header.Fields["Field2"];
tField2.Text = title;
// テキストフィールドの背景色の設定
tField2.BackColor = fColor;
((TextField)c1FlexReport1.Sections.Header.Fields["Field91"]).BackColor = fColor;
((TextField)c1FlexReport1.Sections.Header.Fields["Field92"]).BackColor = fColor;
((TextField)c1FlexReport1.Sections.Footer.Fields["Field93"]).BackColor = fColor;
((TextField)c1FlexReport1.Sections.Footer.Fields["Field94"]).BackColor = fColor;
((TextField)c1FlexReport1.Sections.Footer.Fields["Field95"]).BackColor = fColor;
// VBScriptの設定(1行おきの背景色)
string script1 = "cnt = 0";
c1FlexReport1.OnOpen = script1;
string script2 = "If cnt mod 2 = 0 Then" + "\r\n" +
"Field1.BackColor = \"White\"" + "\r\n" +
"Else" + "\r\n" +
"Field1.BackColor = \"LightGray\"" + "\r\n" +
"EndIf" + "\r\n" +
"cnt = cnt + 1";
c1FlexReport1.Sections.Detail.OnFormat = script2;
// プレビュー表示
c1FlexReport1.Render();
c1FlexViewer1.DocumentSource = c1FlexReport1;
}
DataTable GetMyDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("ColumnA", typeof(String));
for (int i = 0; i < rpPage; i++)
{
dt.Rows.Add(" ");
}
dt.AcceptChanges();
return dt;
}
}
}