在vb.net中如何从程序中传条件查询给水晶报表子报表?

解决方案 »

  1.   

    '显示子报表
            Function showSubReport(ByVal mainReport As ReportClass, ByVal StorePName As String, ByVal PN() As String, ByVal PV() As String, ByVal TableName As String, ByVal SubReportName As String)
                Dim SubReport As New ReportDocument()
                SubReport = mainReport.OpenSubreport(SubReportName)
                Dim Ds As New DataSet() : Dim Ca As New ClassData()
                Ds = Ca.DS(StorePName, PV, PN)
                Ds.Tables(0).TableName = TableName
                SubReport.SetDataSource(Ds)
                SubReport.Refresh()
            End Function
      

  2.   

    执行到这句crReportDocument1 = crReportDocument.OpenSubreport("Subreport1")异常:load report failed。
      

  3.   

    这里BS下的:
    执行到这句crReportDocument1 = crReportDocument.OpenSubreport("Subreport1")
    这里应该传入报表的文件名"report1.rpt"啊.而不是子报表对象的名称.这里是CS下的:
      '显示子报表
        Function showSubReport(ByVal mainReport As ReportClass, ByVal Ds As DataSet, ByVal TableName As String, ByVal SubReportControlName As String)
            'Dim SubReport As New ReportDocument()
            'SubReport = mainReport.OpenSubreport(SubReportName)
            Ds.Tables(0).TableName = TableName
            'SubReport.SetDataSource(Ds)
            'SubReport.Refresh()
            Dim subreportName As String
            Dim subreportObject As SubreportObject
            Dim subreport As New ReportDocument()
            If TypeOf (mainReport.ReportDefinition.ReportObjects.Item(SubReportControlName)) Is SubreportObject Then
                subreportObject = mainReport.ReportDefinition.ReportObjects.Item(SubReportControlName)
                ' 获取子报表名称。
                SubReportName = SubreportObject.SubreportName
                ' 打开子报表作为 ReportDocument。
                subreport = SubreportObject.OpenSubreport(SubReportName)
                ' 预览子报表。
                subreport.SetDataSource(Ds)
                subreport.Refresh()
            End If
        End Function这里传的是子报表对象的名称
    BS跟CS是不同的.