フォームを画面外に表示して非表示にすることができ、他の多くの形式のWinFormsハックの魔法使いと一緒にできることはわかっていますが、私はむしろ禅の道に固執してこれを正しく実行したいと思います。 SSRSローカルレポート(サーバーがないため)があり、ユーザーに表示または印刷のオプションを提供したい(つまり、ユーザーに表示を強制して印刷させたくない)。残念ながら、ReportViewerコントロールは、コードで明示的に作成しているコンポーネントとして(もちろん、using()ブロック内で)印刷しようとすると、またはビューアフォームをインスタンス化しようとすると、その「状態」について文句を言います。表示せずに印刷するだけです。
これを行うための手段はありますか?それとも、画面外に表示して人生を続ける必要がありますか?
私のブログにこれを行うサンプルがあります: http://blogs.msdn.com/brianhartman/archive/2009/02/27/manually-printing-a-report.aspx
LocalReportオブジェクトは、ReportViewerコントロールとは独立してインスタンス化でき、そのブログ投稿に添付されているサンプルコードで直接使用できます。または、最初にUIにレポートを表示しなくても、ReportViewer.LocalReportを渡すことができます。
これをチェックして、それが役立つかどうかを確認してください... http://scruffylookingcatherder.com/archive/2007/12/07/printing-reporting-services-2005-reports.aspx
簡単な説明:SSRS Webサービスを使用して、レポートをEMFイメージにレンダリングしてから、イメージをプリンターに送信します。
Private Sub btnReceipt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReceipt.Click
My.Forms.FormA5.ReportViewer.LocalReport.DataSources.Clear()
Dim cmd = New SqlClient.SqlCommand("Select * from V_Sale where InvoiceNo=" & Me.txtInvoice.Text, cn)
Dim dr = cmd.ExecuteReader()
Dim dt As New DataTable
dt.Load(dr)
dr.Close()
Dim rpt As New ReportViewer
rpt.LocalReport.DataSources.Clear()
rpt.LocalReport.DataSources.Add(New ReportDataSource("posds_receipt", dt))
rpt.LocalReport.ReportEmbeddedResource = "POSsystem.receipt.rdlc"
rpt.SetDisplayMode(DisplayMode.PrintLayout)
rpt.ZoomMode = ZoomMode.FullPage
Dim printDialog1 As PrintDialog = New PrintDialog
printDialog1.Document = PrintDocument1
Dim result As DialogResult = printDialog1.ShowDialog
If (result = DialogResult.OK) Then
PrintDocument1.Print()
End If
End Sub