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?

¿Fue útil?

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

.
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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top