Как распечатать отчет ReportViewer без отображения формы

Пока я понимаю, что могу просто показать форму вне экрана и скрыть ее вместе со многими другими формами хакерского волшебства WinForms, я предпочел бы придерживаться пути дзэн и сделать это правильно. У меня есть локальный отчет SSRS (так что нет сервера), который я хочу дать пользователю возможность просмотра или печати (другими словами, я не хочу, чтобы заставить их просматривать печать). К сожалению, элемент управления ReportViewer жалуется на свое "состояние", когда я пытаюсь его напечатать либо как компонент, который я создаю явно в своем коде (в блоке using(), конечно), либо если я попытаюсь создать экземпляр формы моего зрителя и просто распечатайте, не показывая его.

Есть ли способ сделать это, что будет хорошо со мной, или я просто покажу его вне экрана и продолжу свою жизнь?

Ответы

Ответ 1

У меня есть образец, который публикуется здесь в моем блоге: http://blogs.msdn.com/brianhartman/archive/2009/02/27/manually-printing-a-report.aspx

Объект LocalReport может быть создан независимо от элемента управления ReportViewer и использоваться непосредственно в образце кода, прикрепленного к этому сообщению в блоге. Или вы можете передать в ReportViewer.LocalReport, даже если вы не отобразите отчет в пользовательском интерфейсе.

Ответ 4

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

Ответ 5

Может кто-нибудь сказать мне, как использовать код Брайана Хартмана