CodeZine(コードジン)

特集ページ一覧

5分でわかるActiveReports帳票-さまざまなデータソースの利用とデータのグラフ表示(2007年度版)

ActiveReports for .NET 3.0Jで作るサンプル帳票

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/12/06 14:00

目次

データソースとしてXMLファイルを利用する

 ActiveReportsでは、RDB(リレーショナルデータベース)やExcelで使われているような「表形式」のデータだけでなく、XMLファイルをデータソースとしてそのまま利用することができます。

 データソースにXMLファイルを設定するには、これまでと同様、Detailセクションに表示されているアイコンをクリックして「レポートデータソース」ダイアログを設定します。「レポートデータソース」ダイアログでは「XML」タブを選択して、ファイルのURLとレコードセットパターンを指定します。レコードセットパターンには、基準となるノードのXPathを設定します。今回はstudentタグの部分が繰り返し項目になるので、レコードセットパターンに「//student」と入力します。

レポートデータソースにXMLを設定する
レポートデータソースにXMLを設定する

 レポートデータソースにXMLファイルとレコードセットパターンを設定すると、レポートエクスプローラの「フィールド」にXMLのデータ構造が展開され、ツリー形式で表示されます。黄色の矢印部分がレコードセットパターンとして設定した箇所です。

レポートエクスプローラに展開されたXML
レポートエクスプローラに展開されたXML

 レポートエクスプローラに表示されている「name」や「@id」などのノードをレポートデザイナにドラッグ&ドロップすると、値をバインドさせたTextBoxコントロールを配置できます。ドロップされたTextBoxコントロールにはコントロール名やプロパティが自動的に設定され、DataFieldプロパティにはバインド先のXPathが設定されます。ここではDetailセクションの「クラス」「受講科目」「氏名」のTextboxコントロールをドラッグ&ドロップで貼り付けます。

 また、他のデータソースから参照したいので生徒のIDもTextBoxとして貼り付けていますが、帳票に表示させる必要はないのでVisibleプロパティをfalseに設定し、非表示の項目とします。このような非表示項目は他の表示項目と見た目が同じでは紛らわしいため、背景色にあえて鮮やかな色を使い、区別できるようにしています。

貼り付けたコントロール例
貼り付けたコントロール例

 基準よりも上位のノードのコントロールを張り付けると、DataFieldプロパティには「../@id」のように相対パス形式でXPathが指定されます。今回はgradeHeaderセクションの「学年」の部分に上位ノードのコントロールを使用しています。

XMLファイルを動的にデータソースとして指定する

 レポートデータソースにXMLファイルを指定すると、レポートエクスプローラに表示されるノードをドラッグ&ドロップしてコントロールを配置できるため大変便利なのですが、ファイルの配置場所やレコードセットパターンがアプリケーション実行時の条件によって変更される場合、事前に固定の値を与えることができません。

 アプリケーション実行時にXML形式のデータソースを動的に設定したい場合は、ActiveReports帳票を実行するアプリケーション側でDataDynamics.ActiveReports.DataSources.XMLDataSourceのインスタンスを生成します。この場合もレポートデザイナでデータソースを設定するのと同じように、FileURLプロパティにはXMLファイルのパスを、RecordSetPatternプロパティにはレコードセットパターンをそれぞれ設定します。以下のサンプルコードでは、ボタンを押下するとビューワにXMLデータソースをバインドした帳票が表示されます。

XMLDataSourceを利用して、動的にデータソースとして指定する(C# 2.0)
private void btnExecute_Click(object sender, EventArgs e)
{
    NewActiveReport1 rpt = new NewActiveReport1();
    DataDynamics.ActiveReports.DataSources.XMLDataSource xmlds
         = new DataDynamics.ActiveReports.DataSources.XMLDataSource();
    try
    {
        // XML文書のファイル名を設定します。
        xmlds.FileURL = @"C:\ActiveReports3\Sample_05\2007Student.xml";
        //データセットパターンを設定します。
        xmlds.RecordsetPattern = "//student";
        if (xmlds.Count == 0)
        {
            rpt.Dispose();
            Console.WriteLine("NoDataError");
            return;
        }
        rpt.DataSource = xmlds;
        rpt.Show();
    }
    catch (DataDynamics.ActiveReports.ReportDataException rde)
    {
        Console.WriteLine(rde.Message);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
XMLDataSourceを利用して、動的にデータソースとして指定する(VB.NET 2005)
Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles Button1.Click
    Dim report As New NewActiveReport1
    Dim xmlds As _
      New DataDynamics.ActiveReports.DataSources.XMLDataSource
    Try
        xmlds.FileURL = _
          "C:\\ActiveReports3\\Sample_05\\2007Student.xml"
        xmlds.RecordsetPattern = "//student"
        If xmlds.Count = 0 Then
            report.Dispose()
            Console.WriteLine("NoDataError")
            Return
        End If
        report.DataSource = xmlds
        report.Show()
    Catch rdex As DataDynamics.ActiveReports.ReportDataException
        Console.WriteLine(rdex.Message)
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    End Try
End Sub

 XMLDataSourceを使用するときにRecordSetPatternプロパティを設定していないと、ReportDataExceptionが発生し「FileURLが設定されていないか、空です。」というエラーメッセージが表示されます。また、XMLファイルの中身が空であった場合もエラーになります。しかし、設定してあるRecordsetPatternが「間違っていた場合」はエラーが発生せず、データのない(白紙の)レポートが作成されてしまいます。

 この問題を回避するには、上記サンプルコードのようにXMLDataSourceのCountプロパティでデータ件数を確認するか、ActiveReport側のNoDataイベントにコードを記述して処理を停止させる必要があります。

 レポートデザイナでXMLを設定した場合は、設定後すぐにファイルの中身が確認されるので、指定したレコードセットパターンが間違っているとエラーがポップアップ表示されます。また、レポートエクスプローラーのフィールドにも赤字でエラー表示されます。

XMLの設定エラー
XMLの設定エラー

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:5分でわかるActiveReports帳票

もっと読む

著者プロフィール

  • 宮本奈紗(ミヤモトナサ)

    株式会社システムインテグレータ ERPソリューション部所属。 ERPシステムの設計・開発に従事。業務でActiveReportsを使用。

  • 渡辺俊史(ワタナベトシフミ)

    株式会社システムインテグレータ パッケージ開発部所属。ECサイト構築パッケージの設計・開発に従事。VSUG(Visual Studio User Group) データベース・データアクセスフォーラムリーダー。 blog:t.watanabe weblog

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5