今回は Crystal Reports で簡単なレポートを出力してみる。
まず、Visual Studio 2012 で新しいプロジェクトを、.NET Framwwork 4.5 の Windows フォーム アプリケーションで作成する。プロジェクト名は「CrystalReportsTest」とした。
次に、プロジェクトにデータセットを追加する。名前は DataSet1 とした。これがレポートのデータソースとなる。
DataSet1 に DataTable を追加し、列を2つほど追加しておく。名前は DataTable1、DataColumn1、DataColumn2 とした。
プロジェクトに Crystal Reports を追加する。追加するとダイアログが表示されるが、「レポートウィザードを使用」、「標準」を選んで OK を押す。ちなみに、 プロジェクトに Crystal Reports を追加すると、プロジェクトの Crystal Reports への参照設定は自動的に追加されるようだ。
するとデータを聞かれるので、「プロジェクトデータ」の「ADO.NET データセット」を選び、「>」ボタンを押し、「選択したテーブル」側に DataSet1 を移動させる。「次へ」を押す。
レポートに表示するデータを聞かれるので、「>」ボタンを押し、「表示するフィールド」側にDataColumn1、DataColumn2 を移動させる。「終了」を押す。
以上でレポートの準備はでき、即時印刷はできるようになったのだが、今回はプレビューを表示するようにする。
そこで、プレビューを表示するための Windows フォームをプロジェクトに追加する。Form2 とした。ツールボックスから CrystalReportViewer を選び、Form2 にドロップする。
Form2 の CrystalReportViewer を Form1 からアクセスできるようにするため、Form2.cs を編集しプロパティを追加する。Form2.cs は以下のようになる。
これですべての準備が整ったので、いよいよデータを作成し、レポートを出力してみる。
Form1 にボタンを追加し、名前を printButton とする。ボタンの Click イベントでレポートを出力する。Form1.cs は以下のようになる。
これで実行する。
printButton を押すとプレビューが表示されるはずであるが、なぜか FileNotFoundException が発生した。Message は以下のとおり。
対策として App.config に useLegacyV2RuntimeActivationPolicy を追加する。App.config を以下のようにする。
あらためて実行してみると今度はプレビューを表示することができた。
以上。
まず、Visual Studio 2012 で新しいプロジェクトを、.NET Framwwork 4.5 の Windows フォーム アプリケーションで作成する。プロジェクト名は「CrystalReportsTest」とした。
次に、プロジェクトにデータセットを追加する。名前は DataSet1 とした。これがレポートのデータソースとなる。
DataSet1 に DataTable を追加し、列を2つほど追加しておく。名前は DataTable1、DataColumn1、DataColumn2 とした。
プロジェクトに Crystal Reports を追加する。追加するとダイアログが表示されるが、「レポートウィザードを使用」、「標準」を選んで OK を押す。ちなみに、 プロジェクトに Crystal Reports を追加すると、プロジェクトの Crystal Reports への参照設定は自動的に追加されるようだ。
するとデータを聞かれるので、「プロジェクトデータ」の「ADO.NET データセット」を選び、「>」ボタンを押し、「選択したテーブル」側に DataSet1 を移動させる。「次へ」を押す。
レポートに表示するデータを聞かれるので、「>」ボタンを押し、「表示するフィールド」側にDataColumn1、DataColumn2 を移動させる。「終了」を押す。
以上でレポートの準備はでき、即時印刷はできるようになったのだが、今回はプレビューを表示するようにする。
そこで、プレビューを表示するための Windows フォームをプロジェクトに追加する。Form2 とした。ツールボックスから CrystalReportViewer を選び、Form2 にドロップする。
Form2 の CrystalReportViewer を Form1 からアクセスできるようにするため、Form2.cs を編集しプロパティを追加する。Form2.cs は以下のようになる。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using CrystalDecisions.Windows.Forms; namespace CrystalReportsTest { public partial class Form2 : Form { public Form2() { InitializeComponent(); } public CrystalReportViewer CrystalReportViewer1 { get { return this.crystalReportViewer1; } } } }
これですべての準備が整ったので、いよいよデータを作成し、レポートを出力してみる。
Form1 にボタンを追加し、名前を printButton とする。ボタンの Click イベントでレポートを出力する。Form1.cs は以下のようになる。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CrystalReportsTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void printButton_Click(object sender, EventArgs e) { var ds = new DataSet1(); var dt = ds.DataTable1; dt.AddDataTable1Row("01", "北海道"); dt.AddDataTable1Row("02", "青森県"); dt.AddDataTable1Row("03", "岩手県"); var cr = new CrystalReport1(); cr.SetDataSource(ds); var previewForm = new Form2(); previewForm.CrystalReportViewer1.ReportSource = cr; previewForm.Show(); } } }
これで実行する。
printButton を押すとプレビューが表示されるはずであるが、なぜか FileNotFoundException が発生した。Message は以下のとおり。
ファイルまたはアセンブリ 'file:///C:\\Program Files (x86)\\SAP BusinessObjects\\Crystal Reports for .NET Framework 4.0\\Common\\SAP BusinessObjects Enterprise XI 4.0\\win32_x86\\dotnet1\\crdb_adoplus.dll'、 またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
対策として App.config に useLegacyV2RuntimeActivationPolicy を追加する。App.config を以下のようにする。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
あらためて実行してみると今度はプレビューを表示することができた。
以上。