2009-04-08 152 views
14

Aunque me doy cuenta de que podría mostrar el formulario fuera de la pantalla y ocultarlo, junto con muchas otras formas de hechicería de WinForms, prefiero seguir con la ruta zen y hacer esto bien. Tengo un informe local de SSRS (por lo que no hay servidor) en el que deseo dar al usuario la opción de ver o imprimir (en otras palabras, no quiero obligarlos a ver para imprimir). Lamentablemente, el control ReportViewer se queja de su "estado" cuando intento imprimirlo como un componente que estoy creando explícitamente en mi código (dentro de un bloque using(), por supuesto) o si intento crear una instancia de mi formulario de visor y simplemente imprima sin mostrarlo nunca.Cómo imprimir el informe de ReportViewer sin mostrar un formulario

¿Hay algún medio para hacer esto que me sienta bien, o debería mostrarlo fuera de la pantalla y seguir con mi vida?

Respuesta

22

que tienen una muestra que hace esto publicado en mi blog aquí: http://blogs.msdn.com/brianhartman/archive/2009/02/27/manually-printing-a-report.aspx

El objeto LocalReport se pueden crear instancias de forma independiente del control ReportViewer y se usó directamente en el código de ejemplo adjunta a la entrada del blog. O puede pasar en ReportViewer.LocalReport incluso si no muestra primero el informe en la IU.

+0

Gracias, Brian. Echaré un vistazo a esta solución mañana a primera hora de trabajar. –

+0

Excelente solución; funcionó perfectamente! Felicitaciones por obtener sus primeros puntos SO de una pregunta sobre recompensas;) –

+0

Código impresionante: gracias por compartir. – RThomas

2

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.

+0

Por desgracia, este es un informe local utilizando datos de un conjunto de datos de una base de datos SQLCE 3.5, así que cualquier cosa que ver con la propia SSRS está probablemente fuera de la pregunta. –

+0

@Mozy el enlace que proporcionó no funciona. El enlace correcto es http://scruffylookingcatherder.com/post/2007/12/08/Printing-Reporting-Services-2005-Reports.aspx – N30

0
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 
Cuestiones relacionadas