C#でMicrosoft RDLC report Designerを使ってみる

# 1. はじめに
* C#の.NET 6で簡単な帳票を出力したい
* WinForm上で帳票のプレビューを表示したい

# 2. 開発環境
* C#
* .NET 6
* Visual Studio 2022 Community
* Windows 11
* Microsoft RDLC Report Desinger 2022
* ReportViewerCore.WinForms (NuGet)

# 3. 事前準備
## 3.1. Microsoft RDLC Report Desinger 2022 のインストール
* Visual Studioの拡張機能の管理からダウンロードして、インストールする
* インストールが完了すると、下記画面が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/4f1c2771-f197-7804-4435-83b07f2644d1.png)

## 3.2. ReportViewerCore.WinFormsのインストール
* NuGetよりインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/597040ef-df8c-00f6-ac29-b5fb1d1b6e28.png)

# 4. 簡単なサンプル帳票の作成  
## 4.1. レポートファイル
### 4.1.1. 新規作成からレポートを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/194ee8e5-74b4-d3ce-3a39-aa9e139bebdd.png)

### 4.1.2. 線を引く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/5ba46151-15c5-d614-5aef-dac00cc99795.png)

## 4.2. Windowsフォームアプリの作成
### 4.2.1. Windowsフォームアプリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/e2d63d3b-a00c-3d99-e159-c044a5c7640b.png)

### 4.2.2. ツールボックスよりReportViewerを追加する
* ツールボックスから追加しただけでは.NET Framework版と違いフォームにビューワーが表示されないので注意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d409b709-6041-0892-538f-a8f7c560c13f.png)

### 4.2.3. Form1のコードを追加する
```Csharp:Form1.cs
using Microsoft.Reporting.WinForms;

namespace RDLCSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // ReportViewerコントロールを追加する
            this.Controls.Add(this.reportViewer1);

            // ReportViewerコントロールにレポートを設定する
            reportViewer1.LocalReport.ReportPath = @"C:\Users\user\source\repos\RDLCSample\RDLCSample\Report1.rdlc";
            
            // ディスプレイモードを設定する(Normal/PrintMode)
            reportViewer1.SetDisplayMode(DisplayMode.Normal);
            
            // レポートをリフレッシュする（これをしないと表示されない）
            reportViewer1.RefreshReport();
        }
    }
}
```

## 4.3. 動作確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/8d600b28-3cd2-0f7b-0b4c-f97602986d09.png)

# 5. 動的に文字を切り替えなサンプル帳票の作成
## 5.1. レポートファイル
* ツールブックスからテキストボックスを配置する（日本語は文字化けするので変更する）
* レポートデータ > パラメータから新規パラメータを作成し、テキストボックスの上にドラッグ＆ドロップする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/10b5d07e-79e7-5035-a43b-14fcd036e8f8.png)

## 5.2. Windowsフォームアプリ
```Csharp:Form1.cs
using Microsoft.Reporting.WinForms;

namespace RDLCSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // ReportViewerコントロールを追加する
            this.Controls.Add(this.reportViewer1);

            // ReportViewerコントロールにレポートを設定する
            reportViewer1.LocalReport.ReportPath = @"C:\Users\user\source\repos\RDLCSample\RDLCSample\Report1.rdlc";
            
            // ディスプレイモードを設定する(Normal/PrintMode)
            reportViewer1.SetDisplayMode(DisplayMode.Normal);
)
            // レポートにパラメータを渡す (OrderNo = A001)
            var reportParams = new List<ReportParameter>();
            reportParams.Add(new ReportParameter("OrderNo", "A001"));
            this.reportViewer1.LocalReport.SetParameters(reportParams);


            // レポートをリフレッシュする（これをしないと表示されない）
            reportViewer1.RefreshReport();
        }
    }
}
```
## 5.3. 動作確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/49f48dc0-058c-6e46-5e0b-cb795bb6f927.png)

# 6. 参考文献

https://learn.microsoft.com/en-us/answers/questions/797776/visual-studio-2022-net-6-is-not-supporting-reportv

https://github.com/lkosson/reportviewercore

https://blog.kuma.icu/2015/09/reportviewer-localreport_12.html

https://www.udemy.com/course/cs_print/learn/lecture/26662714#overview