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

XMLデータの処理方法は、他のデータ類とは異なります。このチュートリアルでは、親レポートでXMLデータソースに連結されたサブレポートの設定方法を紹介します。

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

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

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

デザイン時のレイアウト

実行時のレイアウト

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

  1. Visual Studioで新規プロジェクトを開きます。
  2. [プロジェクト]メニューから[新しい項目の追加]を選択します。
  3. [新しい項目を追加]ダイアログ から[ActiveReports 16.0 セクションレポート(コード)]を選択し、ファイル名を「rptMain」に変更します。
  4. [追加]ボタンをクリックします。
  5. [プロジェクト]メニューから[新しい項目の追加]を選択します。
  6. [新しい項目を追加]ダイアログ から [ActiveReports 16.0 セクションレポート(コード)]を選択し、ファイル名を「rptSub」に変更します。
  7. [追加]ボタンをクリックします。

詳細は、「クイックスタート」参照してください。

親レポート(rptMain)をXMLデータソースに接続する

  1. レポートのDetailセクションのバンドから、データソースのアイコンをクリックします。
  2. [レポートデータソース]ダイアログで、[XML]タブを選択し、[ファイルURL]の横にある(...)ボタンをクリックします。
  3. [ファイルを開く]ダイアログで、Customer.xmlを参照し、[開く]ボタンをクリックします。(デフォルトではCustomer.xmlは「..ActiveReportsNET16\Samples\Data\customer.xml」に配置されています。)
  4. [レコードセットパターン]フィールドに、[//CUSTOMER]と入力します。
  5. [OK]をクリックします。

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

  1. デザイナ面より、pageHeaderを選択し、[プロパティ]ウィンドウからHeightプロパティを「0.3」に設定します。
  2. デザイナ面より、グレーの領域をクリックし、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。
  3. デザイナ面より、Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定し、空白スペースを削除します
  4. ツールボックスから、PageHeaderセクション上に「Label」をドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。 
    プロパティ名 プロパティの値
    Text 顧客別の注文
    Location 0, 0 in
    Size 6.5, 0.25 in
    Font Size 14
    Alignment Center
  5. ツールボックスからDetailセクション上に以下のコントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。

    TextBox1

    プロパティ名 プロパティの値
    DataField NAME
    Location 1.2, 0 in
    Size 2, 0.2 in

    Label1

    プロパティ名 プロパティの値
    Text 顧客名
    Location 0, 0 in
    Size 1.2, 0.2 in
    Font Bold True

    Label2

    プロパティ名 プロパティの値
    Text 注文:
    Location 1.2, 0.25 in
    Size 1, 0.2 in
    Font Bold True

    Subreport

    プロパティ名 プロパティの値
    Location 2.3, 0.25 in
    Size 4, 1 in

子レポート(rptSub)のレイアウトを作成する

  1. デザイナ面より、Detailセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。  
    プロパティ名 プロパティの値
    CanShrink True
    BackColor LightSteelBlue
    ヒント: レポートの最終的な出力結果に色を適用したくない場合であっても、サブレポートの背景に色を使用することで、レイアウト関連の問題を容易に見つけることができます。
  2. デザイナ面で、pageHeaderやpageFooterセクションを選択し、[削除]をクリックします。サブレポートはこのセクションを描画しないので、これらのセクションを削除すると処理時間を削減できます。
  3. ツールボックスから、Detailセクションに以下のコントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。

    TextBox1

    プロパティ名 プロパティの値
    DataField TITLE
    Name txtTitle
    Location 0, 0 in
    Size 2.9, 0.2 in

    TextBox2

    プロパティ名 プロパティの値
    DataField PRICE
    Name txtPrice
    Location 3, 0 in
    Size 1, 0.2 in
    Alignment Right
    OutputFormat $#,##0.00 (またはダイアログから通貨を選択します)

子レポート(rptSub)の新インスタンスを作成する

注意: Formatイベントでサブレポートの新しいインスタンスを作成しないでください。Formatを実行するごとに新しいサブレポートが作成されるので、大量のメモリが消費されます。

Visual Basic

  1. [rptMainのデザイナ面を右クリックし、[コードの表示]を選択します。
  2. レポートのコードビューの上部左側のドロップダウンキーをクリックし、rptMainイベントを選択します。
  3. レポートのコードビューの上部右側のドロップダウンキーをクリックし、「ReportStart」を選択し、レポートのReportStartイベントのイベント処理メソッドを作成します。
  4. ハンドラに以下のコードを追加し、rptSubの新しいインスタンスを作成します。
    Visual Basicコード(ReportStartイベントの上に貼り付けます)
    コードのコピー
                                                        
    Dim rpt As rptSub
    
    Visual Basicコード(ReportStartイベント内に貼り付けます)
    コードのコピー
    rpt = New rptSub
    
     

C#

  1. 「rptMain」の下にあるグレーの領域を選択します。
  2. [プロパティ]ウィンドウにあるイベントのアイコンをクリックし、レポートのイベントの一覧を表示します。
  3. ReportStartイベントをダブルクリックし、レポートのReportStartイベントのイベント処理メソッドを作成します。
  4. ハンドラに以下のコードを追加し、rptSubの新しいインスタンスを作成します。
    C#コード(ReportStartイベントの上貼り付けます)
    コードのコピー
    private rptSub rpt;
    
                     
    C#コード(ReportStartイベント内に貼り付けます)
    コードのコピー
    rpt = new rptSub();
    

親レポートのデータのサブセットを子レポートに渡す

親レポートのデータのサブセットを子レポートに渡すには、以下の手順を行います。

  1. rptMainのデザイナ面のDetailセクション上をダブルクリックし、Detail_Formatイベントのイベント処理メソッドを作成します。
  2. ハンドラにコードを追加し、以下の処理を実装します。
    • 新規のGrapeCity XMLデータソースを作成する
    • 新しいデータソースをrptMainのデータソースとして型キャストし、ノードリストを"ORDER/ITEM"フィールドに設定する
    • SubreportコントロールにrptSubを表示する
    • サブレポートに新しいデータソースを渡す

    Visual Basic

    Visual Basicコード(Formatイベント内に貼り付けます)
    コードのコピー
        Dim xmlDS As New GrapeCity.ActiveReports.Data.XMLDataSource
        xmlDS.NodeList = CType(CType(Me.DataSource, GrapeCity.ActiveReports.Data.XMLDataSource).Field("ORDER/ITEM", True), System.Xml.XmlNodeList)
        rpt.DataSource = xmlDS
        SubReport1.Report = rpt
    
                                 

    C#

    C#コード(Formatイベント内に貼り付けます)
    コードのコピー
       GrapeCity.ActiveReports.Data.XMLDataSource xmlDS = new GrapeCity.ActiveReports.Data.XMLDataSource();
       xmlDS.NodeList = (System.Xml.XmlNodeList)((GrapeCity.ActiveReports.Data.XMLDataSource) this.DataSource).Field("ORDER/ITEM", true);
       rpt.DataSource = xmlDS;
       subReport1.Report = rpt;
    

レポートを表示する

または