1998年のActiveX版「ActiveReports 1.0J(日本語版)」の発売以降、開発者のさまざまな要望に応えて機能追加などを行い、2013年にはページのレイアウトを直接作成する「ページレポート」の機能を含めた「ActiveReports for .NET 7.0J」が発売されました(ActiveReportsのこれまでの歴史についてはこちらの資料をご覧ください)。
今回はActiveReports for .NETの7.0Jを利用した帳票アプリケーションの開発の流れを、サンプルを交えながら紹介します。
本稿は、連載『5分でわかるActiveReports帳票(2007年度版)』(渡辺俊史・宮本奈紗 著)の増補改訂版です。
対象読者
- Visual Basic.NETまたはVisual C#を使ってプログラムを作ったことのある方
- 帳票作成ツールに興味のある方
必要な環境
-
Visual Studio 2008 SP1/2010/2012のいずれかでプログラムが作れる環境
(Express EditionではActiveReportsをインストールできません)
本記事のサンプルコードは、C#/Visual Basic 2012で記述しています。
ActiveReports for .NET 7.0Jのインストール
今回はじめてActiveReportsを使用する方は、まず開発用PCにActiveReportsをインストールする必要があります。ActiveReportsは有償の製品ですが、トライアル版(無償)が用意されています。グレープシティのWebページからダウンロードできますので、ここからダウンロードしてインストールを行ってください(インストール時の注意事項については、こちらのナレッジ文書を参照ください)。
ActiveReportsにはStandardとProfessionalの2つのエディションがありますが、今回はProfessionalをインストールします。各エディションの違いは、こちらのナレッジ文書を参照ください。
コントロールの追加
インストール後は、すぐに帳票アプリケーションの開発を始められるようになっていますが、効率のよいアプリケーション開発のために、Visual StudioのツールボックスにActiveReportsのコントロールを追加しておきましょう。
ツールボックスにコントロールを追加するには、メニューバーの[ツール]-[ツールボックスアイテムの選択]をクリックします。「ツールボックスアイテムの選択」ダイアログが表示されるので、追加したいコントロールにチェックを入れて[OK]ボタンを押します。詳しい手順については、製品付属ヘルプの[クイックスタート]-[ActiveReportsコントロールを追加する]をご参照ください。
同じ端末に異なるバージョンのActiveReportsがインストールされていると、「ツールボックスアイテムの選択」ダイアログに、複数バージョンのコントロールが表示されます。1つのプロジェクトに、異なるバージョンのコントロールを混在させるとエラーが発生します。同じ端末に異なるバージョンのActiveReportsを共存させている場合は、バージョンをインストーラやリリースノートから確認し、コントロール使用時にバージョンが混在しないように注意してください(バージョンの詳しい確認方法については、こちらのナレッジ文書を参照ください)。
新規アプリケーションの作成 1
それではさっそく、簡単な帳票アプリケーション作成について紹介しましょう。帳票アプリケーション開発は、大きく分けて以下の4ステップで構成されます。
- レポートデザイナによる帳票レイアウトの作成
- レポートデータソースの設定
- データソースと帳票レイアウトの紐付け
- 呼び出し元アプリケーションの作成
最終的な完成イメージ
今回作成する帳票は、「商品一覧」です。商品のコードと名称、仕入先、在庫数量が並んだ単純な帳票です。
また、帳票を表示するための簡単なWindows Formsアプリケーションも作成します。
レポートデザイナによる帳票レイアウトの作成
ActiveReportsで帳票を作成するには、ソリューションエクスプローラー上でプロジェクトを右クリックして[追加(D)]-[新しい項目(W)]から「ActiveReports 7.0Jセクションレポート(コード)」を選択します。ここではファイル名を「ProductList.cs」とします。
プロジェクトに追加したこのファイルをソリューションエクスプローラーから開くと、帳票レイアウトをデザインするためのレポートデザイナが起動します。レポートデザイナに表示される帳票レイアウトは、初期状態では3つのエリア(ActiveReportsでは「セクション」と呼びます)に分かれています。「pageHeader」「pageFooter」はそれぞれ各ページの先頭と末尾に出力するセクション、「detail」はレポートのデータソースにあわせて繰り返し出力されるセクションです。
これら3つに加え、帳票全体の先頭と末尾に出力される「レポートヘッダ/フッタ」や、明細行(detailセクション)をグループごとにまとめた単位で出力される「グループヘッダ/フッタ」を設定することができます。ヘッダ/フッタの挿入は右クリックメニューの[挿入]から行うことが可能です。ここではレポートヘッダ/フッタを追加します。
次に、レポートデザイナにコントロールを配置して帳票のレイアウトを作成していきます。下記の例では以下のような作業をします。
Detail上のTextBoxには実際のデータが出力されるように設定します。このため、Textプロパティには適当な値を設定しておいて構いません。以下の例では数値が出力されるTextBoxには9999、文字が出力されるTextBoxには○を設定しています。
- ReportHeaderにLabelを1つ貼り付けて、そのTextプロパティに「商品一覧」と設定します。
- PageHeaderには、4つLabelを貼り付け、それぞれのTextプロパティに「商品コード」「商品名称」「仕入先」「在庫数量」と設定します。
- Detailセクション上には、TextBoxを4つ貼り付けます。
新規アプリケーションの作成 2
レポートデータソースの設定
次に、ActiveReports帳票が参照するデータソースの設定を行います。今回はサンプルデータとして、ActiveReportsに付属のデータ(Accessデータベース)を使用します。
レポートデータソースを設定するには、レポートデザイナの「detail」のところにあるデータベース型のアイコンをクリックします。すると設定ダイアログが表示されるので、[作成]ボタンを押してデータベース接続文字列を作成します。今回の接続先はAccessデータベースなので、OLE DBプロバイダとして「Microsoft Jet 4.0 OLE DB Provider」を選択し、接続先データベースとして、ActiveReportsインストール先のDataフォルダ(標準ではC:\Program Files\ActiveReportsNET7\Data)にある「NWind.mdb」を設定します。
なお、開発PCのOSが64ビット(x64)OSの場合、標準のインストール先は「C:\Program Files (x86)」になります。ご注意ください。また、プロジェクトの「ターゲットCPU」をx86に変更してください(デフォルトのAnyCPUのままだとエラーが発生します)。
次に、レポート出力するデータを取得するためのSQLを記述します。今回は「商品ID」「商品名」「仕入先」「在庫数量」を取得する次のようなクエリを設定します。
SELECT Products.ProductID, Products.ProductName, Suppliers.CompanyName, Products.UnitsInStock FROM Suppliers INNER JOIN Products ON Suppliers.SupplierID = Products.SupplierID
接続文字列の設定が終わったら、OKボタンを押してレポートデータソース設定を終わります。
ActiveReports for .NETでは多くの種類のデータソースを使用することができます。
上記の手順で使用されるデータソースは、ActiveReports固有のデータソースです。これはOle DBを使用しており、Accessファイルに接続するためのJetデータプロバイダを呼び出しています。
固有のデータソースには他に、SQL Serverへ接続するものや、XMLからデータを取得するものがあります。
固有のデータソースを使うとデザイン時にデータソース設定が完了するので便利ですが、コードで設定することで、.NET Framework標準の以下のオブジェクトをデータソースとして使うことが可能です。
- DataSet
- DataTable
- DataView
- DataRowCollection
- IListインターフェースを実装したクラス
データソースアイコンから直接設定できないデータベースでもDataTableやDataReaderの形で取得すれば、コード上でレポートのデータソースに設定することができます。この他に、特にデータソースを定義せずにコードでレポート上に出力する値を直接制御することも可能です。
コントロールとデータのバインド
データソースの設定が終わったら、コントロールとデータのバインドを行います。TextBoxコントロールのDataFieldプロパティにフィールドを設定します。
TextBoxを選択した状態で、プロパティウィンドウのDataFieldプロパティを選択し、コンボボックスを展開するとデータソースに含まれるフィールド(データの列名)が現れます。ここから選択することで、そのフィールドのデータがTextBoxに表示されることになります。
DataFieldプロパティの設定がひと通り終わったら、正しく設定されているかどうか確認しましょう。レポートデザイナの[プレビュー]タブを表示すると、データが配置された印刷イメージを確認することができます。
呼び出し元アプリケーションの作成
印刷イメージができたところで、今度は帳票を呼び出すアプリケーションを作成します。
フォームに[帳票生成]ボタン(button1)と、生成された帳票の内容を確認するためのViewerコントロール(viewer1)を配置します。
帳票の生成処理
コントロールの配置が終わったら[帳票生成]ボタンをダブルクリックし、実際に帳票を生成してビューワに表示するためのコードを実装します。ActiveReportsでは帳票クラスのインスタンスを作成し、Runメソッドを実行すると帳票が生成されます。
生成された帳票はDocumentプロパティから参照できるので、これをViewerコントロールのDocumentプロパティに設定します。また、Viewerコントロールの機能を使って、帳票のプレビューや拡大/縮小表示、印刷を行うことができます。
private void button1_Click(object sender, EventArgs e) { using (ProductList report = new ProductList()) { report.Run(); this.viewer1.Document = report.Document; } }
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click Using report As ProductList = New ProductList() report.Run() Me.Viewer1.Document = report.Document End Using End Sub
セクションレポートの基本クラスGrapeCity.ActiveReports.SectionReportは、IDisposableインターフェースを実装しています。帳票クラスの生成時はusingステートメントを利用して、アンマネージドリソースを確実に開放できるようにコードを記述しておくことをおすすめします。
旧バージョンで作成したアプリケーションの移行
ここからは旧バージョン(ActiveReports for .NET 1.0J~6.0J)から、7.0Jへの移行方法を説明します。
ActiveReportsは、Visual Studioに複数のバージョンを共存させることが可能です。ただし、同一プロジェクト内で異なるバージョンのActiveReportsを混在させることはできません。またVisual Studio上でのデザイナの競合を避けるために、付属のツールで設定変更を行う必要がある場合があります。
ここでは、旧バージョンで作成したアプリケーションを7.0Jにバージョンアップする方法を紹介します。
これまでのActiveReportsでは、レポートレイアウトは次のどちらかの形式を使用していました。
- 拡張子が「.rpx」となっているXML形式のファイル(1.0J、2.0J、6.0Jで使用。3.0Jで補助的に使用)
- Windowsフォームなどのソースファイルと同様に、(ファイル名)~.cs、~.designer.cs,~.resxもしくは~.vb、~.Designer.vb、~.resxの組で表されるソースファイル(3.0J、6.0Jで使用)
セクションレポートについては、使用する形式は7.0Jでも同様です。基本的には後者のソースファイルを使います。
プロジェクトの移行
旧バージョンのActiveReportsからプロジェクトを移行する際は、ファイルコンバータで置換を行う必要があります。メニューバーの[ツール]-[ActiveReports 7.0Jファイルコンバータ]で実行します。
ActiveReports 7.0JファイルコンバータのOKボタンを押下すると、ソリューション配下のrpxファイルとコード形式のレポートが全置換され、参照設定も変更されます。
ActiveReports for .NETをコンパイルして動作させるには、プロジェクトにライセンスのためのテキストを組み込む必要があります。これは通常は、レポートレイアウトの追加の時に自動的にプロジェクトに付加されます。
しかし、旧バージョンからのアップデートの場合には自動的に付加されません。そのため、上記のファイルコンバータを使った作業の後にコンパイルしようとすると、ライセンス不足エラーが発生することがあります。
エラーが発生する場合には手動でライセンスを付加してください。詳しくはヘルプの「アプリケーションのライセンスの組み込み」を参照してください。
なお、上記の移行処理を行った後で、新規レポートの追加やViewerの追加などを行うとライセンス文字列が追加されます。手動で追加する代わりにこの方法でライセンス文字列を追加しても構いません。
単一ファイル(.rpxファイルの移行)
既存の.rpxファイルをActiveReports for .NET 7.0Jのプロジェクトに組み込むには、以下のようにします。
- まず空のレイアウトを表示します。Visual Studioのメニューバーに「レポート」が現れます。
- [レポート]-[レイアウトファイルを開く]を選択して、既存の.rpxファイルを開きます。レポートのレイアウトが.rpxファイルのものに置き換わります。
空のレイアウトでなくてもこの作業は可能ですが、上書きされるので注意してください。
逆に、プロジェクト中にあるレポートを.rpxファイルに変換するには、[レポート]-[レイアウトファイルの保存]を選択します。なお、ここでできた.rpxファイルは、旧バージョンのActiveReportsから使用することが可能な場合もありますが、コントロールの種類が増えたなどのこともあり、前方互換性(旧バージョンでの使用)は保証されていません。
まとめ
今回は、ActiveReportsを利用した簡単な帳票アプリケーション開発のサンプルや、旧バージョンからの移行方法について紹介しました。Visual Studioと統合されたActiveReportsのレポートデザイナは軽快で使いやすく、効率の良い帳票アプリケーション開発が可能です。
次回は7.0Jから追加された「ページレポート」を紹介します。