今回は 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 は以下のようになる。
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>

あらためて実行してみると今度はプレビューを表示することができた。
crystal-reports-7
以上。