I am running SSRS 2005, rendering reports locally using a report viewer. Rather than direct the viewer to an .rdlc file, I use an XMLDocument. A few of my reports have a large image in the background that needs to be invisible when the report prints. This was straightforward - I just use a report parameter and set the visible state of the image to the value of the parameter. The hard part is getting the report to print without an error.
Initially, I render the report with the following code:
Private Sub ShowReport()
Try
With Me.ReportViewer1
.Reset()
.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
.LocalReport.LoadReportDefinition(New System.IO.StringReader(_Doc.OuterXml))
.LocalReport.DataSources.Add(_Item1)
.LocalReport.DataSources.Add(_Item2)
.LocalReport.SetParameters(_Param)
.RefreshReport()
End With
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
This code works fine. I have hidden the print button on the report viewer, and to print, the user must press my button which runs the following code.
Private Sub PrintReport()
Try
_Param(0) = New Microsoft.Reporting.WinForms.ReportParameter("ImageVisible", "False")
ShowReport()
ReportViewer1.PrintDialog()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Resetting the parameter and re-displaying the report works fine on its own. The PrintDialog method works fine on its own. When combined in the same Sub like this, I get the following error:
"Operation is not valid due to the current state of the object".
Does anyone know how I could get it to print without an error? I would be very grateful for any help.
Solved it. The problem is caused because the report has not finished rendering when the PrintDialog method is called. I got around it using the RenderingComplete event of the report viewer.
No comments:
Post a Comment