VB.NET 2010 RDLC子报告“子报告的数据检索失败”

时间:2015-09-24 17:07:47

标签: sql-server-2008-r2 rdlc vb.net-2010

使用VB.NET 2010和SQL Server 2008 R2。

我继承了一个带有RDLC报告的应用程序。我以前没用过那些。该报告已创建并正常工作,但发起人遗漏了一组数据,即报告的“父”记录的子报告。

我试图添加一个子报表,将main的输入参数指向sub(它们使用相同的信息)。让sub使用指向Stored过程的数据集并显示结果。

任何执行(和显示)子报告数据的尝试都会失败并显示消息

  

子报告的数据检索失败....位于....请检查日志文件以获取更多信息。

关闭日志文件的位置/位置?

我可以传递params,只要我添加一个带有存储过程的数据集,如果我报告,我可以看到params。如果我添加存储过程......没有。我尝试在互联网上找到修复程序,以创建XSD存储过程调用的副本...但这也无效。

主要报告在没有Sub。

的情况下正常工作

思想?

我错过了什么?

我不应该能够添加子报表,链接参数并使子报表显示相关信息吗?

以下是我调用主报告的代码:

    Dim adapter As New SqlClient.SqlDataAdapter
    Dim table As New DataTable
    Try
        Cursor.Current = Cursors.WaitCursor


        ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
        ReportViewer1.LocalReport.ReportPath = Application.StartupPath & "\IndividualInterviewerDataReport.rdlc"


        Dim ReportParameters(5) As Microsoft.Reporting.WinForms.ReportParameter
        ReportParameters(0) = New Microsoft.Reporting.WinForms.ReportParameter("SurveyName", frmMain.SurveyName)
        ReportParameters(1) = New Microsoft.Reporting.WinForms.ReportParameter("Interviewer", InterviewerId)
        ReportParameters(2) = New Microsoft.Reporting.WinForms.ReportParameter("Panel", PanelMonth)
        '
        '
        ReportParameters(3) = New Microsoft.Reporting.WinForms.ReportParameter("- Version: " + ProductVersion)
        ReportParameters(4) = New Microsoft.Reporting.WinForms.ReportParameter("PanelYear", PanelYear)
        ReportParameters(5) = New Microsoft.Reporting.WinForms.ReportParameter("SurveyNbr", frmMain.SurveyNum)

        ReportViewer1.LocalReport.SetParameters(ReportParameters)
        ReportViewer1.ShowPrintButton = True
        ReportViewer1.ZoomPercent = 100

        Me.spInterviewerDataByPanelTableAdapter.Connection.ConnectionString = My.Settings.DBConnection

        Me.spInterviewerDataByPanelTableAdapter.Fill(Me.CodingControlDataSet.spInterviewerDataByPanel, frmMain.SurveyNum, PanelYear, PanelMonth, InterviewerId)

        Me.ReportViewer1.RefreshReport()

1 个答案:

答案 0 :(得分:1)

如果我没记错,您需要处理SubreportProcessing对象的LocalReport事件,并在那里设置子报告数据。您可以通过为事件处理程序设置EventArgs参数的属性来执行此操作。

这里有一些代码(改编自Microsoft documentation):

'In your report setup code'
AddHandler Me.ReportViewer1.LocalReport.SubreportProcessing, _
    AddressOf DemoSubreportProcessingEventHandler

'Event hander
 Public Sub DemoSubreportProcessingEventHandler(ByVal sender As Object, _
 ByVal e As SubreportProcessingEventArgs)

    e.DataSources.Add(New ReportDataSource("DatasetNameInReport", MyDataTable ))
End Sub