手順3. レポートを表示させるWebフォームの作成
[新しい項目の追加]-[Webフォーム Visual Basic]を選択し、新規にWebフォームを作成します。名前は既定の「WebForm1.aspx」のままとします。ドキュメントウィンドウ上で、「WebForm1.aspx」をデザインビューに切り替えておきます。
[ツールボックス]をクリックし、[AJAX Extensions]グループの[ScriptManager]をWebフォーム上の青い枠の中にドラッグ&ドロップします。ScriptManagerとは、AJAX対応のASP.NET Webページのクライアントスクリプトを管理するコントロールで、ReportViewerをWebフォームで利用する際には必要になります。
続いて、[レポート]グループの[ReportViewer]も[ScriptManager]のすぐ右にドラッグ&ドロップします。右肩のReportViewerタスクの[レポートの選択]で、手順2で作成したレポート「Report1.rdlc」を選択すると、[ReportViewer]の下に、[ObjectDataSource]コントロールが自動的に配置されます(図16)。
[ReportViewer]の幅(400pixel)は必要に応じて少し広げておいても構いません。
ただし、PDF出力の際には、レポートで設定した幅と高さが有効になるので、ReportViewerの大きさはまったく気にする必要はありません。
これで、印刷機能を実装したWebフォーム「WebForm1.aspx」ができました。タブの[×]をクリックし、変更を保存して、デザイナーを閉じてください。
「WebForm1.aspx」を右クリックして、[ブラウザで表示]をクリックします。
図17のように、画面が表示されれば成功です。
プリンタに印刷するには、フロッピーディスクの形をしたアイコンをクリックし、PDFへのエクスポートを行い、Acrobat Readerなどで印刷イメージを確認してから印刷します。
ReportViewerでの表示とPDFでの表示は微妙に異なることがあります。ReportViewerでの表示は仮の姿なので、見栄えに多少問題があっても気にする必要はありません。
PDFでの表示が完成品になるので、表示に問題があれば、修正する必要があります。
罫線が表示されない、行間が空いてしまう、などの問題が発生する原因としては、(A)罫線も1pt(ポイント)の幅を占有する、(B)長さの単位を「cm」で設定しても、「inch」ベースに変換して処理されるため誤差が生じる(後述)、といったことが挙げられます。
このような場合は、以下のような微調整を行ってください。
- テキストボックスのプロパティ[Padding]の[Top]と[Bottom]を0ptにする
- 各種コントロールのサイズを小さくする
手順4. PDFへの直接出力
PDFファイルに出力するには、前述したように、ブラウザの画面からエクスポートすることで可能ですが、エンドユーザに余分な負担を強いるものです。
そこで、Webフォームの表示時に直接PDFへ出力させるようなコードを、Page_Loadイベントに記述します。WebForm1.aspxを右クリックして[コードの表示]をクリックし、WebForm1.aspx.vbのコードを表示させ、リスト2のように修正してください。
Imports Microsoft.Reporting.WebForms Public Class WebForm1 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim dataTableAdapter As New DataSet1TableAdapters.StoredProcedure1TableAdapter Dim rds As New ReportDataSource rds.Name = "DataSet1" rds.Value = dataTableAdapter.GetData ReportViewer1.LocalReport.DataSources.Add(rds) Dim bytes() As Byte = ReportViewer1.LocalReport.Render("PDF", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing) Response.ContentType = "Application/pdf" Response.BinaryWrite(bytes) Response.End() End Sub End Class
「Dim dataTableAdapter~」~「Me.ReportViewer1~」の5行では、準備したデータをレポートデータとしてReportViewer1のデータソースにセットします。
「Dim bytes()~」は、レポートからの出力をバイナリデータとして格納する部分です。
「Response~」の3行では、ブラウザにコンテンツのタイプをPDFと認識させ、バイナリーデータを出力し、それ以降の余分な出力を止める、という処理を行っています。
太字の部分は、「WebForm1.aspx」のソースを確認し、名称が一致するように注意してください。この処理では「Microsoft.Reporting.WebForms」名前空間を利用しますので、それをインポートする記述も忘れないようにしてください。
変更が終了したら、コードウィンドウを閉じ、変更を保存してください。WebForm1.aspxをブラウザで表示して、図18のように直接PDFが出力されることを確認してください。
これで、業務で使える帳票が完成しました。あとは、メニュー画面のボタンなどから、このWebフォームに遷移させるなどして、業務システムに実装してください。