Cómo imprimir un informe de ReportViewer sin mostrar un formulario
-
06-09-2019 - |
Pregunta
Mientras me di cuenta de que solo pude mostrar la forma fuera de la pantalla y esconderlo, junto con muchas otras formas de WinForms hechicería hacker, prefiero seguir con el camino Zen y obtener este hecho a la derecha. Tengo un informe local SSRS (por lo que no hay un servidor) que quiero dar al usuario la opción de visualización o impresión (en otras palabras, no quiero obligarlos a ver a imprimir). Por desgracia, el control ReportViewer se queja de su "estado" cuando trato de imprimir, ya sea como un componente estoy creando explícitamente en mi código (dentro de un bloque usando (), por supuesto) o si intento crear una instancia de mi forma espectador y acaba de imprimir sin tener que mostrarlo.
¿Hay una manera de hacer esto que me sienta bien, o debería simplemente demostrar que fuera de pantalla y seguir adelante con mi vida?
Solución
Tengo una muestra que no esta publicado en mi blog aquí: http://blogs.msdn.com/brianhartman/archive/2009/02/27/manually-printing-a-report.aspx
El objeto LocalReport puede ser instanciada independientemente del control ReportViewer y se usó directamente en el código de ejemplo adjunto a la entrada en el blog. O puede pasar en ReportViewer.LocalReport incluso si primero no mostrar el informe en la interfaz de usuario.
Otros consejos
Mira esto y ver si ayuda ... http://scruffylookingcatherder.com/archive/2007/12/07/printing-reporting-services-2005-reports.aspx
Una pequeña explicación: Se trata de utilizar el servicio web de SSRS para rendir el informe a una imagen EMF luego enviar la imagen a la impresora
.Por favor, consulte el siguiente enlace muy útil para usted 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