2009-04-08 1 views
14

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

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

ответ

22

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

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

+0

Спасибо, Брайан. Сегодня я рассмотрю это решение на первом месте. –

+0

Отличное решение; отлично работал! Поздравляем с получением ваших первых SO-очков из вопроса о щедрости;) –

+0

Удивительный код - спасибо за обмен. – RThomas

2

Проверьте это и увидеть, если это помогает ... http://scruffylookingcatherder.com/archive/2007/12/07/printing-reporting-services-2005-reports.aspx

Небольшое пояснение: Она использует веб-службы SSRS, чтобы сделать отчет в EMF изображении, а затем отправить изображение на принтер.

+0

К сожалению, это локальный отчет, используя данные из DataSet из 3.5 базы данных SQLCE, так что ничего общего с самим SSRS, вероятно, из вопрос. –

+0

@Mozy ссылка, которую вы предоставили, не работает. Правильная ссылка 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