Ich habe mich gerade an einem Report mit Subreports versucht, habe aber die bekannte "...could not be shown"-Fehlermeldung anstatt der Subreports in meinem Hauptreport. Die Standartlösung von MSDN habe ich bereits durchgearbeitet, die hat nichts geholfen.
Ich poste jetzt mal meinen Code, vielleicht sieht ja jemand meinen Fehler!
Der "normale" Report (Subreport): UC_Report
Public Class UC_Report
Private m_Reportname As String
Public WriteOnly Property Reportname() As String
Set(ByVal value As String)
m_ReportName = value
End Set
End Property
...
Public Sub p_Load()
Try
Me.ReportViewer.Reset()
Me.ReportViewer.ShowProgress = True
Me.ReportViewer.ShowRefreshButton = False
Me.ReportViewer.ProcessingMode = ProcessingMode.Local
Me.ReportViewer.LocalReport.EnableExternalImages = True
Dim oResStream As System.IO.Stream
oResStream = _
System.Reflection.Assembly.GetExecutingAssembly.GetManifestResour_
ceStream(m_Reportname)
Me.ReportViewer.LocalReport.LoadReportDefinition(oResStream)
Me.ReportViewer.LocalReport.DataSources.Clear()
Me.ReportViewer.LocalReport.DataSources.Add(New ReportDataSource( _
m_ReportDatasetname, m_ReportDatatable))
Dim oRepParmsList As New System.Collections.Generic.List(Of _
ReportParameter)
oRepParmsList.Add(New ReportParameter("FilterText", m_ReportFilter))
If Not IsNothing(oRepParmsList) Then
Me.ReportViewer.LocalReport.SetParameters(oRepParmsList)
End If
Me.ReportViewer.LocalReport.Refresh()
Me.ReportViewer.RefreshReport()
Me.ReportViewer.Refresh()
Catch ex As System.Exception
Dim strMsg As String = String.Format("{0} - {1}.{2}", ex.Message, _
MyBase.Name, "p_Load")
gLogFile.Write(strMsg, True)
End Try
End Sub
Private Sub ReportViewer_RenderingComplete(ByVal sender As Object, _
ByVal e As _
Microsoft.Reporting.WinForms.Ren_
deringCompleteEventArgs) _
Handles _
ReportViewer.RenderingComplete
Static bPrintLayout As Boolean = False
If Not bPrintLayout Then
Me.ReportViewer.SetDisplayMode(DisplayMode.PrintLayout)
bPrintLayout = True
End If
End Sub
Private Sub ReportViewer_ReportErReportViewer_ReportErrorror(ByVal sender _
As Object, _
ByVal e As _
Microsoft.Reporting.WinForms.ReportErr_
orEventArgs) _
Handles ReportViewer.ReportError
Dim strMsg As String = String.Format("{0} - {1}.{2}", _
e.Exception.Message, MyBase.Name(), "ReportViewer_ReportError")
'-------------
gLogFile.Write(strMsg, True)
'-------------
End Sub
End ClassAls darüberliegenden Report habe ich die Klasse kopiert und UC_Report_mS genannt. Darin ist zusätzlich der Code:
Private Subreport As New UC_Report
Private sub_Reportname As String
Public WriteOnly Property subReportname() As String
Set(ByVal value As String)
Subreport.Reportname = value
End Set
End Property
Private sub_ReportDatatable As DataTable
Public WriteOnly Property subReportDatatable() As DataTable
Set(ByVal value As DataTable)
Subreport.ReportDatatable = value
End Set
End Property
Private sub_ReportDatasetname As String
Public WriteOnly Property subReportDatasetname() As String
Set(ByVal value As String)
Subreport.ReportDatasetname = value
End Set
End Property
Private sub_ReportFilter As String
Public WriteOnly Property subReportFilter() As String
Set(ByVal value As String)
Subreport.ReportFilter = value
End Set
End Property
Public Sub SubreportProcessingEventHandler(ByVal sender As Object, ByVal e _
As SubreportProcessingEventArgs)
e.DataSources.Add(New ReportDataSource(m_ReportDatasetname))
End Sub Und im Load:
AddHandler ReportViewer.LocalReport.SubreportProcessing, AddressOf _
Me.SubreportProcessingEventHandler Im Report habe ich dann in eine Spalte im Zeilenbereich einen Subreport gezogen und unter Properties sowohl den Reportnamen, als auch den notwendigen Parameter angegeben.
Kann mir jemand sagen was noch fehlt / falsch ist? |