セクションレポートでは、スクリプトを使用し、コントロール、関数、クラス、名前空間などにアクセスすることができます。スクリプトでクラスを作成してメソッドを呼び出すか、Windowsフォームからレポートのスクリプトにコードを追加する処理を実行することができます。次のトピックでは、スクリプトの基本的な使い方について説明します。
以下の手順は、Visual Studioのプロジェクトにセクションレポート(コード、またはXML)のテンプレートを追加したことを前提としています。詳細については、「クイックスタート」を参照してください。
コントロールにアクセスする
下記のサンプルコードは、Detailセクションに貼り付けたTextBox1のTextプロパティの値を「こんにちは」に変更して表示しています。
Visual Basic
Visual Basicスクリプト(Detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
Me.TextBox1.Text = "こんにちは" |
または
Visual Basicスクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
CType(rpt.Sections("Detail1").Controls("TextBox1"), TextBox).Text = "こんにちは" |
C#
C#スクリプト(Detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
this.textBox1.Text = "こんにちは"; |
または
C#スクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
((TextBox)rpt.Sections["detail"].Controls["textBox1"]).Text = "こんにちは"; |
クラス内の関数にアクセスする
AddNamedItemメソッドを使用し、スクリプトからプロジェクト内のクラスの関数にアクセスすることができます。データベース接続文字列やSQLクエリなどの機密情報を、RPXファイルに保存せずにスクリプトに保存する場合は便利です。
Visual Basic
Visual Basicコード |
コードのコピー
|
---|---|
Public Class clsMyItem End Class |
C#
C#コード |
コードのコピー
|
---|---|
public partial class clsMyItem { } |
Visual Basic
Visual Basicコード(クラス内に貼り付けます) |
コードのコピー
|
---|---|
Public Function getMyItem() As String getMyItem = "こんにちは" End Function |
C#
C#コード(クラス内に貼り付けます) |
コードのコピー
|
---|---|
public string getMyItem() { return "こんにちは"; } |
Visual Basic
Visual Basicコード(ReportStartイベントの前または内に貼り付けます) |
コードのコピー
|
---|---|
Me.AddNamedItem("myItem", new clsMyItem()) |
C#
C#コード(ReportStartイベントの前または内に貼り付けます) |
コードのコピー
|
---|---|
this.AddNamedItem("myItem", new clsMyItem()); |
Visual Basic
Visual Basicスクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
Me.TextBox1.Text = myItem.getMyItem() |
または
Visual Basicスクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
CType(rpt.Sections("Detail1").Controls("TextBox1"), TextBox).Text = myItem.getMyItem() |
C#
C#スクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
this.textBox1.Text = myItem.getMyItem(); |
または
C#スクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
((TextBox)rpt.Sections["detail"].Controls["textBox1"]).Text = myItem.getMyItem(); |
名前空間を参照する
AddScriptReferenceを使用して、.NETまたは他の名前空間を参照することができます。AddScriptReferenceは、スクリプトがプロジェクトで初期化されていないアセンブリにアクセスする場合にのみ必要です。たとえば、スクリプトで「System.Data.DataSet」にアクセスするために、"AddScriptReference("System.Data.Dll")"を呼び出して参照を追加することができます。
Visual Basic
Visual Basicコード(Formのコード内に貼り付けます。YourReportNameを実際のレポート名に変更します。) |
コードのコピー
|
---|---|
Private Sub runReport() Dim rpt as new YourReportName rpt.AddScriptReference("System.Data.dll") rpt.Run() End Sub |
C#
C#コード(Formのコード内に貼り付けます。YourReportNameを実際のレポート名に変更します。) |
コードのコピー
|
---|---|
private void runReport() { YourReportName rpt = new YourReportName; rpt.AddScriptReference("System.Data.dll"); rpt.Run(); } |
メモ:カスタムアセンブリを使用する場合、厳密な名前付きアセンブリを作成、グローバルアセンブリキャッシュ(GAC)に登録する必要があります。
デザイナのスクリプトタブでカスタムアセンブリを使用するために、デザイナに読み込む前にレポートにアセンブリ参照を追加する必要があります。
Visual Basic
Visual Basic.NET code. Paste INSIDE the Form code. Replace YourReportName with the name of your report. |
コードのコピー
|
---|---|
Dim rpt As SectionReport = New SectionReport() |
C#
C# code. Paste INSIDE the Form code. Replace YourReportName with the name of your report. |
コードのコピー
|
---|---|
SectionReport rpt = new SectionReport(); |
これで、デザイナのスクリプトタブでカスタムアセンブリを使用できます。
スクリプトにコードを追加する
FormのコードビューでAddCodeメソッドを使用し、スクリプトにコードを追加することができます。AddCodeメソッドでは、実行時にスクリプトでコードセグメントを挿入します。これは、データベース接続文字列やSQLクエリ文字列などの機密情報を、RPXファイルに保存せずにスクリプト内で使用する場合や、動的にスクリプトのコードを変更したい場合に便利です。
Visual Basic
Visual Basicコード(レポートのクラス内に貼り付けます) |
コードのコピー
|
---|---|
Public Function addThisCode() As String Dim sCode As String = "Public Function ShowACMessage() As String" + Environment.NewLine + "ShowACMessage = ""my Added Code""" + Environment.NewLine + "End Function" addThisCode = sCode End Function |
C#
C#コード(レポートのクラス内に貼り付けます) |
コードのコピー
|
---|---|
public string addThisCode() { string sCode = "public string ShowACMessage(){return \"my Added Code\";}"; return sCode; } |
Visual Basic
Visual Basicコード(ReportStartイベント内に貼り付けます) |
コードのコピー
|
---|---|
Me.AddCode(addThisCode())
|
C#
C#コード(ReportStartイベント内に貼り付けます) |
コードのコピー
|
---|---|
this.AddCode(addThisCode()); |
Visual Basic
Visual Basicスクリプト(Detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
Me.TextBox1.Text = ShowACMessage() |
または
Visual Basicスクリプト(Detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
CType(rpt.Sections("Detail1").Controls("TextBox1"), TextBox).Text = ShowACMessage() |
C#
C#スクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
this.textBox1.Text = ShowACMessage(); |
または
C#スクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
((TextBox)rpt.Sections["detail"].Controls["textBox1"]).Text = ShowACMessage(); |
メソッドを呼び出すクラスを作成する
スクリプトでクラスを作成し、メソッドを呼び出すことができます。
Visual Basic
Visual Basicスクリプト(スクリプトのタブ内に貼り付けます) |
コードのコピー
|
---|---|
Public Class MyFuncs Public Sub New() End Sub Public Function ShowMyString() As String Return "サンプル文字列" End Function End Class |
C#
C#スクリプト(スクリプトのタブ内に貼り付けます) |
コードのコピー
|
---|---|
public class MyFuncs { public MyFuncs() { } public string ShowMyString() { return "サンプル文字列"; } } |
Visual Basic
Visual Basicスクリプト(Detail1_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
Dim f As MyFuncs = New MyFuncs() Me.TextBox1.Text = f.ShowMyString |
または
Visual Basicスクリプト(Detail1_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
Dim f As MyFuncs = New MyFuncs() CType(rpt.Sections("Detail1").Controls("TextBox1"), TextBox).Text = f.ShowMyString |
C#
C#スクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
MyFuncs f = new MyFuncs(); this.textBox1.Text = f.ShowMyString(); |
または
C#スクリプト(detail_Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
MyFuncs f = new MyFuncs(); ((TextBox)rpt.Sections["detail"].Controls["textBox1"]).Text = f.ShowMyString(); |