ActiveReportsでは、スクリプトを使用することで、XMLファイルに保存されたレポートレイアウトに、コードを含めることができます。RPXファイルをXMLファイルに保存するときにスクリプトを含めることで、後からデザイナを使用せずに、レポートをロード、実行して、直接ビューワコントロールに表示できます。
このチュートリアルでは、スクリプトを使用して、サブレポートを含むスタンドアロンレポートを作成する方法を紹介します。
このトピックでは、以下のタスクを行います。
- Visual StudioプロジェクトにActiveReportを追加する
- rptMainレポートをデータソースに接続する
- サブレポートをレポートに追加する
- サブレポートをデータソースに接続する
- rptMainレポートのレイアウトを作成する
- サブレポートのレイアウトを作成する
- rptMainレポートにスクリプトを追加する
- レポートを表示する
 |
メモ: このチュートリアルは、Northwindデータベース(Nwind.mdb)のテーブルを使用しています。Northwindデータベース(..ActiveReportsNET9\Data\Nwind.mdb)へのアクセス権限が必要です。 |
チュートリアルを完了すると、次のようなレポートが作成されます。
設計時のレイアウト(rptMainレポート)
実行時のレイアウト(rptMainレポート)
Visual StudioプロジェクトにActiveReportを追加する
- Visual Studioで新規プロジェクトを開きます。
- [プロジェクト]メニューから[新しい項目の追加]を選択します。
- [新しい項目の追加]ダイアログで、[ActiveReports 9.0Jセクションレポート(XML)]を選択し、ファイル名前を「rptMain」に変更します。
- [追加]ボタンをクリックします。
詳細は、「プロジェクトにレポートを追加する」を参照してくだざい。
rptMainレポートをデータソースに接続する
 |
メモ: [レポートエクスプローラ]ノードの下にフィールドを表示するために、以下の手順を行います。
|
- Detailセクションのバンド上にあるデータソースのアイコンをクリックします。
- [レポートデータソース]ダイアログでは、[OLE DB]タブで[接続文字列]の横にある[作成]ボタンをクリックします。
- [データリンクプロパティ]ウィンドウでは、[プロバイダー]に[Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックして、[接続]タブへ移動します。
- <...>をクリックし、データベース(Nwind.mdb)へのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
- [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
- [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドで、テキストが自動的に追加されます。
-
[OLE DB]タブの[クエリ]フィールドに次のSQLクエリを入力します。
SQLクエリ |
コードのコピー
|
SELECT * FROM [order details] inner join products on [order details].productid = products.productid
|
- [OK]をクリックし、データを保存して、レポートのデザイナ面に戻ります。
サブレポートをレポートに追加する
- [プロジェクト]メニューから[新しい項目の追加]を選択します。
- [新しい項目の追加]ダイアログでは、[ActiveReports 9.0Jセクションレポート(XML)]を選択し、ファイル名前を「rptSub」に変更します。
- [追加]ボタンをクリックします。
- [PageHeader]と[PageFooter]を右クリックし、[削除]を選択します。サブレポートはこのセクションを表示しないので、これらのセクションを削除すると処理時間を削減できます。
- レポートの下にあるグレーの領域をクリックし、レポートを選択します。[プロパティ]ウィンドウでは、ShowParameterUIプロパティを「False」に設定します。これによりサブレポートからのパラメータの要求を回避できます。
詳細は、「プロジェクトにレポートを追加する」を参照してくだざい。
サブレポートをデータソースに接続する
 |
メモ: [レポートエクスプローラ]ノードの下にフィールドを表示するために以下の手順を行います。 |
- Detailセクションのバンド上にあるデータソースのアイコンをクリックします。
- [レポートデータソース]ダイアログでは、[OLE DB]タブで[接続文字列]の横にあるに[作成]ボタンをクリックします。
- [データリンクプロパティ]ウィンドウでは、[Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックして、[接続]タブへ移動します。
- <...>をクリックし、データベース(Nwind.mdb)へのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
- [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
- [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドで、テキストが自動的に追加されます。
-
[OLE DB]タブの[クエリ]フィールドに次のSQLクエリを入力します。
SQLクエリ |
コードのコピー
|
SELECT * FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID ORDER BY CompanyName, OrderDate
|
- [OK]をクリックし、レポートのデザイナ面に戻ります。
rptMainレポートのレイアウトを作成する
- rptMainのデザイナ面を右クリックし、[挿入]オプションから[グループヘッダ/フッタ]を選択してレポートにグループヘッダとフッタを追加します。
- グループヘッダを選択し、以下のプロパティを設定します。
プロパティ名 |
値 |
Name |
ghCompanies |
BackColor |
LemonChiffon |
CanShrink |
True |
DataField |
CompanyName |
- ツールボックスから、TextBoxコントロールをghCompanies上にドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
値 |
DataField |
CompanyName |
Size |
4, 0.2 in |
Location |
0, 0 in |
Font Bold |
True |
Font Size |
12 |
- rptMainのデザイナ面を右クリックし、[挿入]オプションから[グループヘッダ/フッタ]を選択してレポートにもう1つのグループヘッダとフッタを追加します。
- 2番目のグループヘッダを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
値 |
Name |
ghOrders |
BackColor |
LightYellow |
CanShrink |
True |
DataField |
OrderDate |
GroupKeepTogether |
All |
KeepTogether |
True |
- ツールボックスから、TextBoxコントロールをghOrders上に3つドラッグし、各TextBoxのプロパティを以下のように設定します。
TextBox1
プロパティ名 |
値 |
DataField |
OrderDate |
Location |
1.1, 0 in |
Size |
1, 0.2 in |
OutputFormat |
yyyy年M月d日 |
TextBox2
プロパティ名 |
値 |
DataField |
RequiredDate |
Location |
3.5, 0 in |
Size |
1, 0.2 in |
OutputFormat |
yyyy年M月d日 |
TextBox3
プロパティ名 |
値 |
DataField |
ShippedDate |
Location |
5.5, 0 in |
Size |
1, 0.2 in |
OutputFormat |
yyyy年M月d日 |
Alignment |
Right |
- ツールボックスから、LabelコントロールをghOrders上に3つドラッグし、各Labelのプロパティを以下のように設定します。
Label1
プロパティ名 |
値 |
Location |
0, 0 in |
Size |
1, 0.2 in |
Text |
受注日: |
Font Bold |
True |
Label2
プロパティ名 |
値 |
Location |
2.5, 0 in |
Size |
1, 0.2 in |
Text |
納期: |
Font Bold |
True |
Label3
プロパティ名 |
値 |
Location |
4.8, 0 in |
Size |
0.65, 0.2 in |
Text |
発送日: |
FontStyle |
Bold |
- Detailセクションを選択し、[プロパティ]ウィンドウでは、CanShrinkプロパティを「True」に設定します。
- ツールボックスから「Subreport」コントロールをDetailセクション上にドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
値 |
ReportName |
C:\プロジェクトへのパス\rptSub.rpx |
Name |
SubReport1 |
Size |
6.5, 1 in |
Location |
0, 0 in |
サブレポートのレイアウトを作成する
- rptSubのデザイナ面を右クリックし、[挿入]オプションから[グループヘッダ/フッタ]を選択してレポートにグループヘッダとフッタを追加します。
- 「デザイナ面」のグレーの領域を選択し、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。
- グループヘッダを選択し、以下のプロパティを設定します。
プロパティ名 |
値 |
Name |
ghOrderDetails |
BackColor |
LightSteelBlue |
CanShrink |
True |
DataField |
OrderID |
- ツールボックスから、LabelコントロールをghOrderDetails上に4つドラッグし、各Labelのプロパティを以下のように設定します。
Label1
プロパティ名 |
値 |
Location |
0, 0 in |
Text |
商品名 |
Font Bold |
True |
Alignment |
Left |
Label2
プロパティ名 |
値 |
Location |
3.25, 0 in |
Text |
数量 |
Font Bold |
True |
Alignment |
Right |
Label3
プロパティ名 |
値 |
Location |
4.4, 0 in |
Text |
価格 |
Font Bold |
True |
Alignment |
Right |
Label4
プロパティ名 |
値 |
Location |
5.5, 0 in |
Text |
値引き |
Font Bold |
True |
Alignment |
Right |
- ツールボックスから、「Line」 コントロールをghOrderDetails上に4つドラッグし、各Lineのプロパティを次のように設定します。
Line1
プロパティ名 |
値 |
X1 |
3.2 |
X2 |
3.2 |
Y1 |
0 |
Y2 |
0.2 |
Line2
プロパティ名 |
値 |
X1 |
4.3 |
X2 |
4.3 |
Y1 |
0 |
Y2 |
0.2 |
Line3
プロパティ名 |
値 |
X1 |
5.45 |
X2 |
5.45 |
Y1 |
0 |
Y2 |
0.2 |
Line4
プロパティ名 |
値 |
X1 |
0 |
X2 |
6.5 |
Y1 |
0.2 |
Y2 |
0.2 |
- Detailセクションを選択しながら、[プロパティ]ウィンドウで次のプロパティを設定します。
プロパティ名 |
値 |
BackColor |
Gainsboro |
CanShrink |
True |
- ツールボックスから、TextBoxコントロールをDetailセクションの上に4つドラッグし、以下のようにプロパティを設定します。
TextBox1
プロパティ名 |
値 |
DataField |
ProductName |
Location |
0, 0 in |
Size |
3.15, 0.2 in |
Alignment |
Left |
TextBox2
プロパティ名 |
値 |
DataField |
Quantity |
Location |
3.25, 0 in |
Size |
1, 0.2 in |
Alignment |
Right |
TextBox3
プロパティ名 |
値 |
DataField |
Products.UnitPrice |
Location |
4.4, 0 in |
Size |
1, 0.2 in |
Alignment |
Right |
OutputFormat |
Currency |
TextBox4
プロパティ名 |
値 |
DataField |
Discount |
Location |
5.5, 0 in |
Size |
1, 0.2 in |
Alignment |
Right |
OutputFormat |
0.00% |
- ツールボックスから、「Line」 コントロールをDetailセクション上に4つドラッグし、以下のようにプロパティを設定します。
Line5
プロパティ名 |
値 |
X1 |
3.2 |
X2 |
3.2 |
Y1 |
0 |
Y2 |
0.2 |
Line6
プロパティ名 |
値 |
X1 |
4.3 |
X2 |
4.3 |
Y1 |
0 |
Y2 |
0.2 |
Line7
プロパティ名 |
値 |
X1 |
5.45 |
X2 |
5.45 |
Y1 |
0 |
Y2 |
0.2 |
Line8
プロパティ名 |
値 |
X1 |
0 |
X2 |
6.5 |
Y1 |
0.2 |
Y2 |
0.2 |
rptMainレポートにスクリプトを追加する
- 「デザイナ面」のグレーの領域を選択し、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。
- レポートのScriptLanguageプロパティを使用したい言語に変更します。デフォルトではC#が設定されています。
- レポートデザイナの下にある[スクリプト]タブをクリックし、スクリプトエディタにアクセスします。
- スクリプトを埋め込み、rptMainレポートのデータソースを設定し、サブレポートにデータを渡します。
Visual Basic
Visual Basicコード(スクリプトエディタに貼り付けます) |
コードのコピー
|
Dim rptSub As GrapeCity.ActiveReports.SectionReport
Sub ActiveReport_ReportStart
'ジェネリックレポートの新しいインスタンスを作成します。
rptSub = new GrapeCity.ActiveReports.SectionReport()
'rpxファイルをジェネリックレポートにロードします。
rptSub.LoadLayout(me.SubReport1.ReportName)
'データをrptMainレポートに接続します。
Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\ActiveReportsNET9\Data\NWIND.mdb;Persist Security Info=False"
Dim sqlString As String = "Select * from orders inner join customers on orders.customerid = customers.customerid order by CompanyName,OrderDate"
Dim ds As new GrapeCity.ActiveReports.Data.OleDBDataSource()
ds.ConnectionString = connString
ds.SQL = sqlString
rpt.DataSource = ds
End Sub
Sub Detail1_Format
Dim rptSubCtl As GrapeCity.ActiveReports.SectionReportModel.SubReport = me.SubReport1
Dim childDataSource As New GrapeCity.ActiveReports.Data.OleDBDataSource()
childDataSource.ConnectionString = CType(rpt.DataSource, GrapeCity.ActiveReports.Data.OleDBDataSource).ConnectionString
'SQLクエリでパラメータを設定します。
childDataSource.SQL = "Select * from [order details] inner join products on [order details].productid = products.productid where [order details].orderid = <%OrderID%>"
'サブレポートにデータを渡します。
rptSub.DataSource = childDataSource
'rptSubをSubreportコントロールに表示します。
rptSubCtl.Report = rptSub
End Sub
|
C#
C#コード(スクリプトエディタに貼り付けます) |
コードのコピー
|
GrapeCity.ActiveReports.SectionReport rptSub;
public void Detail1_Format()
{
GrapeCity.ActiveReports.SectionReportModel.SubReport rptSubCtl = this.SubReport1;
GrapeCity.ActiveReports.Data.OleDBDataSource childDataSource = new GrapeCity.ActiveReports.Data.OleDBDataSource();
childDataSource.ConnectionString = ((GrapeCity.ActiveReports.Data.OleDBDataSource) rpt.DataSource).ConnectionString;
//SQLクエリでパラメータを設定します。
childDataSource.SQL = "Select * from [order details] inner join products on [order details].productid = products.productid where [order details].orderid = <%OrderID%>";
//サブレポートにデータを渡します。
rptSub.DataSource = childDataSource;
//rptSubをSubreportコントロールに表示します。
rptSubCtl.Report = rptSub;
}
public void ActiveReport_ReportStart()
{
//ジェネリックレポートの新しいインスタンスを作成します。
rptSub = new GrapeCity.ActiveReports.SectionReport();
//rpxファイルをジェネリックレポートにロードします。
rptSub.LoadLayout(this.SubReport1.ReportName);
//データをrptMainレポートに接続します。
string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\ActiveReportsNET9\Data\NWIND.mdb;Persist Security Info=False";
string sqlString = "Select * from orders inner join customers on orders.customerid = customers.customerid order by CompanyName,OrderDate";
GrapeCity.ActiveReports.Data.OleDBDataSource ds = new GrapeCity.ActiveReports.Data.OleDBDataSource();
ds.ConnectionString = connString;
ds.SQL = sqlString;
rpt.DataSource = ds;
}
|
レポートを表示する
- 設計時にレポートを表示するには、プレビュータブをクリックします。
または
関連トピック