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