SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

5分でわかるActiveReports帳票

5分でわかるActiveReports帳票(2013年度版)-動的なレポート

ActiveReports for .NET 7.0Jで作るサンプル帳票(5)

  • X ポスト
  • このエントリーをはてなブックマークに追加

データソースの変更

 セクションレポートでは、デザイン時にデータソースアイコンからデータソースの設定を行うことが可能です(第1回参照)。

 しかしながら、実際のアプリケーションでは、レポートのデータソースは出力したい条件にあわせて変更したいケースが多いと思われます。

 セクションレポートでは、DataSourceプロパティにデータソースとなるオブジェクトを設定することで、簡単にデータソースを変更することができます。

 データソースとして使用できるオブジェクトには、以下のようなものがあります。

  • GrapeCity.ActiveReports.Data名前空間のデータソースクラス
  • DataSet
  • DataTable
  • DataView
  • DataRowCollection
  • DataReader
  • IListインターフェースを実装したクラス

 これらをレポートのDataSourceプロパティに設定してから、レポートの実行(Runメソッドの呼び出しなど)を行います。

 一例として、OleDbDataConnection、OleDbDataAdapterクラスを利用してAccessのmdbファイルに接続してDataTableを取得し、レポートに設定するコードを示します。

Visual Basic .NET
Dim filepath As String = "(ファイルへのパス)\Accessファイル.mdb"
Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filepath)
Dim sqlstring As String = "Select * from Products order by CategoryID"
Dim da As New OleDb.OleDbDataAdapter(sqlstring, cn)
Dim ds As New DataSet
Dim dt As New DataTable
da.Fill(dt)
‘ 得られたDataTableをレポートに設定して実行
Dim rpt As New NewReport1()
rpt.DataSource = dt
rpt.Run()
C#
string filePath = @"(ファイルへのパス)\Accessファイル.mdb";
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath);
string sqlString = "Select * from Products order by CategoryID";
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(sqlString, cn);
System.Data.DataTable dt = new System.Data.DataTable();
da.Fill(dt);
// 得られたDataTableをレポートに設定して実行
NewReport rpt = new NewReport();
rpt.DataSource = dt;
rpt.Run();
接続文字列

 Accessのmdbファイルも含め、データベースに接続する場合には接続文字列が必要になります。これはActiveReportsの組み込みデータソースを使う場合も同じです。上記の例では、OleDbConnectionのコンストラクタの引数に設定している文字列が接続文字列になります。

 接続文字列はデータソースの種類ごとに仕様が異なるので、一から記述するのは難しい時があります。簡単に構成する方法としては、System.Data.OleDb.OleDbConnectionStringBuilderなどの接続文字列ビルダを使う方法があります。

 また、ActiveReportsのデータソースアイコンで自動作成された接続文字列をコピーして使うという方法もあります。

アンバウンドレポート

 レポートの要件によっては、DataTableなどのデータソースを使わずにレポートを生成しなければならない場合もあります。このような場合、「アンバウンドレポート」という手法が有効です。

 デザイン時にデータソースアイコンからデータソースを設定した場合や、前述のようにDataSourceプロパティにデータオブジェクトを設定した場合、データソースへの接続やレコードの読み込み・移動などは、レポートエンジンがすべて自動的に行います、これを「バウンドレポート」と言います。

 これに対して、アンバウンドレポートの場合、フィールドの追加やデータソースへの接続、レコードの移動、データのセット等の処理は、すべてコードで制御します。この手法は、テキストファイルや、配列に格納されたデータなど、さまざまなデータを元にレポートを生成するといった用途に向いています。

 アンバウンドレポートの基本的な構成手順は、以下のようになります。

 (1)DataInitializeイベントで、必要なフィールドを追加する。

 (2)FetchDataイベントで、レポートの生成を続けるかどうかを、イベントの引数であるSectionReport.FetchEventArgsオブジェクトのEOFプロパティで設定する。同時に(1)で追加したフィールドに値を設定する。

 簡単な例として、10行のみのデータを与えるレポートを以下に示します。

Visual Basic .NET
Private Sub SimpleReport_DataInitialize(sender As System.Object, e As System.EventArgs) Handles MyBase.DataInitialize
    ‘ フィールドを追加する。
    Me.Fields.Add("Field1")
    Me.Fields.Add("Field2")
End Sub

Private Sub SimpleReport_FetchData(sender As System.Object, eArgs As GrapeCity.ActiveReports.SectionReport.FetchEventArgs) Handles MyBase.FetchData
    Static count As Integer = 0
    Const limit As Integer = 10

    count += 1

    If count > limit Then
        ‘ レポートの終了
        eArgs.EOF = True
    Else
        eArgs.EOF = False

        ' フィールドに値を設定する。
        Me.Fields("Field1").Value = count
        Me.Fields("Field2").Value = "No." & count
    End If
End Sub
C#
private int count = 0;
const int limit = 10;

private void SimpleReport_DataInitialize(object sender, EventArgs e)
{
    // フィールドを追加する。
    this.Fields.Add("Field1");
    this.Fields.Add("Field2");
}

private void SimpleReport_FetchData(object sender, FetchEventArgs eArgs)
{
    this.count++;

    if (count > limit)
    {
        // レポートの終了。
        eArgs.EOF = true;
    }
    else
    {
        eArgs.EOF = false;

        // フィールドに値を設定する。
        this.Fields["Field1"].Value = count;
        this.Fields["Field2"].Value = "No." + count;
    }
}

次のページ
XML形式のレポート(RPXファイル)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
5分でわかるActiveReports帳票連載記事一覧

もっと読む

この記事の著者

グレープシティ株式会社 ActiveReportsチーム(グレープシティカブシキガイシャ アクティブレポートチーム)

 宮城県仙台市に本社を構えるグレープシティでは、日本の業務に適したシステムをより早く開発するためのソフトウェアを提供しています。エンドユーザーの利用しやすさ、幅広いユーザー環境への対応、そして何よりプログラマの作業を軽減することを一番に目指しています。 ActiveReportsは、帳票開発に必要なあらゆる機能を備えた当社を代表するコンポーネントの1つ。1998年の発売以来、日本だけでなく全世界で多数の帳票開発者に使用されています。製品開発は同チームが中心になり、「日本仕様」の厳しい要望を実現することを目指しています。...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7516 2015/07/23 16:16

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング