Как распечатать отчет ReportViewer без отображения формы
Пока я понимаю, что могу просто показать форму вне экрана и скрыть ее вместе со многими другими формами хакерского волшебства WinForms, я предпочел бы придерживаться пути дзэн и сделать это правильно. У меня есть локальный отчет SSRS (так что нет сервера), который я хочу дать пользователю возможность просмотра или печати (другими словами, я не хочу, чтобы заставить их просматривать печать). К сожалению, элемент управления ReportViewer жалуется на свое "состояние", когда я пытаюсь его напечатать либо как компонент, который я создаю явно в своем коде (в блоке using(), конечно), либо если я попытаюсь создать экземпляр формы моего зрителя и просто распечатайте, не показывая его.
Есть ли способ сделать это, что будет хорошо со мной, или я просто покажу его вне экрана и продолжу свою жизнь?
Ответы
Ответ 1
У меня есть образец, который публикуется здесь в моем блоге: http://blogs.msdn.com/brianhartman/archive/2009/02/27/manually-printing-a-report.aspx
Объект LocalReport может быть создан независимо от элемента управления ReportViewer и использоваться непосредственно в образце кода, прикрепленного к этому сообщению в блоге. Или вы можете передать в ReportViewer.LocalReport, даже если вы не отобразите отчет в пользовательском интерфейсе.
Ответ 2
Проверьте это и посмотрите, помогает ли это... http://scruffylookingcatherder.com/archive/2007/12/07/printing-reporting-services-2005-reports.aspx
Небольшое объяснение: он использует веб-службу SSRS для рендеринга отчета на изображение EMF, затем отправляет изображение на принтер.
Ответ 3
Пожалуйста, см. ссылку ниже, очень полезную для вас
http://social.msdn.microsoft.com/Forums/en-US/9f52d79d-5baf-4e84-97d5-7dbba6623b89/printing-without-the-reportviewer
Ответ 4
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
Ответ 5
Может кто-нибудь сказать мне, как использовать код Брайана Хартмана