Question

Alors que je me rends compte que je pouvais montrer la forme hors de l'écran et le cacher, ainsi que de nombreuses autres formes de WinForms hackish wizardry, je préfère rester avec le chemin zen et obtenir ce fait. J'ai un rapport local SSRS (donc pas de serveur) que je veux donner à l'utilisateur la possibilité soit l'affichage ou l'impression (en d'autres termes, je ne veux pas les forcer à voir à imprimer). Malheureusement, le contrôle ReportViewer se plaint de son « état » lorsque je tente de l'imprimer soit en tant que composante que je crée explicitement dans mon code (à l'intérieur d'un bloc à l'aide (), bien sûr) ou si je tente de instancier ma forme de spectateur et juste imprimer sans jamais le montrer.

Y at-il un moyen de faire ce qui va s'asseoir bien avec moi, ou devrais-je montrer juste hors de l'écran et de passer ma vie?

Était-ce utile?

La solution

J'ai un échantillon qui fait cela a posté sur mon blog ici: http://blogs.msdn.com/brianhartman/archive/2009/02/27/manually-printing-a-report.aspx

L'objet LocalReport peut être instancié indépendamment du contrôle ReportViewer et utilisé directement dans l'exemple de code attachée à ce billet. Ou vous pouvez passer ReportViewer.LocalReport même si vous ne pas afficher d'abord le rapport dans l'interface utilisateur.

Autres conseils

Vérifiez cela et voir si ça aide ... http://scruffylookingcatherder.com/archive/2007/12/07/printing-reporting-services-2005-reports.aspx

Une petite explication: Il utilise le service Web SSRS pour rendre le rapport à une image EMF puis envoyer l'image à l'imprimante

.
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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top