GrapeCity ActiveReports for .NET 16.0J
スクリプトとサブレポート
ActiveReportsユーザーガイド > サンプルとチュートリアル > チュートリアル > セクションレポートのチュートリアル > スクリプト > スクリプトとサブレポート

ActiveReportsでは、スクリプトを使用することで、XMLファイルに保存されたレポートレイアウトにコードを含めることができます。RPXファイルをXMLファイルに保存するときにスクリプトを含めることで、後からデザイナを使用せずにレポートをロード、実行して、直接ビューワコントロールに表示できます。

このチュートリアルでは、スクリプトを使用して、サブレポートを含むスタンドアロンレポートを作成する方法を紹介します。

このトピックでは、以下のタスクを行います。

メモ: このチュートリアルは、Northwindデータベース(Nwind.mdb)のテーブルを使用しています。Northwindデータベース(..ActiveReportsNET16\Data\Nwind.mdb)へのアクセス権限が必要です。

チュートリアルを完了すると、次のようなレポートが作成されます。

デザイン時のレイアウト(rptMainレポート)

実行時のレイアウト(rptMainレポート)

Visual StudioプロジェクトにActiveReportを追加する

  1. Visual Studioで新規プロジェクトを開きます。
  2. [プロジェクト]メニューから[新しい項目の追加]を選択します。
  3. [新しい項目の追加]ダイアログで、[ActiveReports 16.0Jセクションレポート(XML)]を選択し、ファイルの名前をrptMainに変更します。
  4. [追加]ボタンをクリックします。詳細については「クイックスタート」を参照してくだざい。

rptMainレポートをデータソースに接続する

メモ: [レポートエクスプローラ]ノードの下にフィールドを表示するために、以下の手順を行います。

  1. Detailセクションのバンド上にあるデータソースのアイコンをクリックします。  
  2. [レポートデータソース]ダイアログで、[OLE DB]タブで[接続文字列]の横にある[作成]ボタンをクリックします。
  3. [データリンクプロパティ]ウィンドウで、[プロバイダー][Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックして、[接続]タブへ移動します。
  4. <...>をクリックし、データベース(Nwind.mdb)へのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
  5. [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
  6. [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドにテキストが自動的に追加されます。
  7. [OLE DB]タブの[クエリ]フィールドに次のSQLクエリを入力します。
    SQLクエリ
    コードのコピー
    SELECT * FROM [order details] inner join products on [order details].productid = products.productid                                        
    
  8. [OK]をクリックし、データを保存して、レポートのデザイナ面に戻ります。

サブレポートをレポートに追加する

  1. [プロジェクト]メニューから[新しい項目の追加]を選択します。
  2. [新しい項目の追加]ダイアログで、[ActiveReports 16.0Jセクションレポート(XML)]を選択し、ファイルの名前をrptSubに変更します。
  3. [追加]ボタンをクリックします。
  4. [PageHeader][PageFooter]を右クリックし、[削除]を選択します。サブレポートはこのセクションを表示しないので、これらのセクションを削除すると処理時間を削減できます。
  5. レポートの下にあるグレーの領域をクリックし、レポートを選択します。[プロパティ]ウィンドウで、ShowParameterUIプロパティをFalseに設定します。これによりサブレポートからのパラメータの要求を回避できます。詳細については「クイックスタート」を参照してくだざい。

サブレポートをデータソースに接続する

メモ: [レポートエクスプローラ]ノードの下にフィールドを表示するために以下の手順を行います。
  1. Detailセクションのバンド上にあるデータソースのアイコンをクリックします。
  2. [レポートデータソース]ダイアログで、[OLE DB]タブで[接続文字列]の横にあるに[作成]ボタンをクリックします。
  3. [データリンクプロパティ]ウィンドウで、[Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックして、[接続]タブへ移動します。
  4. <...>をクリックし、データベース(Nwind.mdb)へのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
  5. [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
  6. [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドで、テキストが自動的に追加されます。
  7. [OLE DB]タブの[クエリ]フィールドに次のSQLクエリを入力します。
    SQLクエリ
    コードのコピー
    SELECT * FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID ORDER BY CompanyName, OrderDate                                        
    
  8. [OK]をクリックし、レポートのデザイナ面に戻ります。

rptMainレポートのレイアウトを作成する

  1. rptMainのデザイナ面を右クリックし、[挿入]オプションから[グループヘッダ/フッタ]を選択してレポートにグループヘッダとフッタを追加します。
  2. グループヘッダを選択し、以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Name ghCompanies
    BackColor LemonChiffon
    CanShrink True
    DataField CompanyName
  3. ツールボックスからTextBoxコントロールをghCompanies上にドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    DataField CompanyName
    Size 4, 0.2 in
    Location 0, 0 in
    Font Bold True
    Font Size 12
  4. rptMainのデザイナ面を右クリックし、[挿入]オプションから[グループヘッダ/フッタ]を選択してレポートにもう1つのグループヘッダとフッタを追加します。
  5. 2番目のグループヘッダを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Name ghOrders
    BackColor LightYellow
    CanShrink True
    DataField OrderDate
    GroupKeepTogether All
    KeepTogether True
  6. ツールボックスから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

  1. ツールボックスから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
  2. Detailセクションを選択し、[プロパティ]ウィンドウで、CanShrinkプロパティを「True」に設定します。
  3. ツールボックスからSubreportコントロールをDetailセクション上にドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    ReportName C:\プロジェクトへのパス\rptSub.rpx
    Name SubReport1
    Size 6.5, 1 in
    Location 0, 0 in

サブレポートのレイアウトを作成する

  1. rptSubのデザイナ面を右クリックし、[挿入]オプションから[グループヘッダ/フッタ]を選択してレポートにグループヘッダとフッタを追加します。
  2. デザイナ面のグレーの領域を選択し、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。 
  3. グループヘッダを選択し、以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Name ghOrderDetails
    BackColor LightSteelBlue
    CanShrink True
    DataField OrderID
  4. ツールボックスから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
  5. ツールボックスから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
  6. Detailセクションを選択しながら、[プロパティ]ウィンドウで次のプロパティを設定します。
    プロパティ名 プロパティの値
    BackColor Gainsboro
    CanShrink True
  7. ツールボックスから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%
  8. ツールボックスから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レポートにスクリプトを追加する

  1. デザイナ面のグレーの領域を選択し、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。
  2. レポートのScriptLanguageプロパティを使用したい言語に変更します。デフォルトではC#が設定されています。
  3. レポートデザイナの下にある[スクリプト]タブをクリックし、スクリプトエディタにアクセスします。
  4. スクリプトを埋め込み、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;
}

レポートを表示する

または