*

crystalreportを使わずにレポートを出す場合の覚書 ReportViewer

公開日: : 最終更新日:2014/05/18 C#

crystalreportを使わず、visualstudio2013proに入っているレポートを使ってレポートを表示・印刷できるようにする。

やっていること

データセットにデータを入れ、
あらかじめフォーマットが決めてある書式ファイルに反映し、
フォーム画面に表示する。
印刷もそこからできるようにする。
見積書、請求書、納品書等に利用する。

手順

  1. データセットの追加・設定
  2. レポートの追加・設定
  3. フォームの追加
  4. コードの記述
  5. 実行(デバッグ)
(1)データセットの追加・設定

 データセットを追加する。
データセットの追加
 ツールボックスからDatatableを選択し、配置する。DatatableにはColumn(列)を5つ作る。
データセット

(2)レポート書式の追加・設定

 レポートを追加する(Report1.rdlc)。
レポートの追加
 テキストボックスとテーブルを配置する。レポートデータを表示(Ctrl+Alt+D)し、
レポートデータの表示
「新規」を選択>「データセット」を選択>「データソース」で先ほど作成したDatasetが選択できるようになっているので選択。
レポートの設定
「レポートデータ」>「データセット」でデータセットの項目をテキストボックスやテーブルにドラッグして配置していく。
レポートのプロパティ
完成形
レポート本文のプロパティ

(3)フォームの追加・設定

 Form1とForm2を作成する。Form1はボタンのみ配置し、
debug01
このボタンをクリックするとForm2が表示されレポートが表示されるようにする。
Form2にreportviewer(ツールボックス内reportにある)を配置し、(2)で作成したレポートの書式が選択肢に出てくるのでそれを選択。Fillを選ぶとForm2の枠内一杯に表示される。
reportviewerの設定

(4)コードの記述

●Form1への記述

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 Microsoft.Reporting.WinForms;//追加

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 from2 = new Form2();            
            DataSet1 ds = new DataSet1();
            for(int i = 1; i < 4 ; i++)
            {
                DataSet1.DataTable1Row row = 
                 ds.DataTable1.NewDataTable1Row();
                row.BeginEdit(); 
                row.DataColumn1 = "Column1-Row" + i.ToString();
                row.DataColumn2 = "Column2-Row" + i.ToString();
                row.DataColumn3 = "Column3-Row" + i.ToString();
                row.DataColumn4 = "Column4-Row" + i.ToString();
                row.DataColumn5 = "Column5-Row" + i.ToString();
                row.EndEdit();
                ds.DataTable1.Rows.Add(row);
            }

            from2.reportViewer1.Reset();
            from2.reportViewer1.ProcessingMode = 
                        ProcessingMode.Local;            
            from2.reportViewer1.LocalReport.ReportPath =
               Environment.CurrentDirectory + @"\Report1.rdlc";

            // ReportViewer 用データセットの作成
            ReportDataSource rds = new ReportDataSource();
            rds.Name = "DataSet1"; //DataSet1.xsdのDataSet1
            rds.Value = ds.DataTable1;
            from2.reportViewer1.LocalReport.DataSources.Add(rds);

            //datasetの中身を一つずつ取り出すとき用
            //MessageBox.Show
       // (ds.DataTable1.Rows[0]["DataColumn2"].ToString());

            //Form2を表示する            
            from2.ShowDialog(this);
            
            ds.Dispose();
            from2.Dispose();
            
        }
    }
}

●Form2への記述

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 Microsoft.Reporting.WinForms;//追加

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            this.reportViewer1.RefreshReport();
        }

        private void reportViewer1_Load(object sender, EventArgs e)
        {//以下2行は最初から印刷レイアウトで表示する場合の記述
            Microsoft.Reporting.WinForms.DisplayMode DisplayMode
                            = new DisplayMode();
            this.reportViewer1.SetDisplayMode(DisplayMode.PrintLayout); 
        }
    }
}
(5)実行(デバッグ)

実行結果は以下のとおり。
debug03

debug04
印刷レイアウトで表示した場合テキストの表示が荒くなる。アンチエイリアスの問題かなと思うが印刷レイアウトをさわれるプロパティなどが見当たらないので今回放置する。印刷はきれいにできる。

*印刷すると1枚に収まるはずなのに2枚になり、その2枚目は白紙になる場合:
コード実行時にテーブルの行数は3行になる。レポートに配置したテーブルの行数が2行増える。その分はレポートの本文の長さ(プロパティ)にプラスされるためである。本文の長さを調節(適宜減らす)すると1枚で印刷される

admax_area



関連記事

no image

保護中: crystal report

crystal reportを拡張子rptのファイルを編集しようとしてやってみたが、 現段階では不

記事を読む

no image

TcpListener

using System; using System.Collections.Generic;

記事を読む

no image

STAThread 属性を付ける理由

STA/MTA は COM の用語です。 ものすごく簡単に言うと「OLE/COM サーバの手続き呼

記事を読む

no image

EXCELをPDFに変換

EXCELをPDFに変換する方法 大量のエクセルファイルをPDFに変換する必要がでたのでTryして

記事を読む

admax_area



Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

admax_area



PAGE TOP ↑