2016-12-08 2 views
0

내 frmReports에 보고서 뷰어가 있습니다. Report1.rdlc 및 Report2.rdlc라는 두 개의 보고서를 만들었습니다. 나는 강력하게 정의 된 DataSet을 가지고있다. 각각의 보고서에 대해 두 개의 DataTable (1, 2)이있다. 두 보고서를 표시 할 때 동일한 reportViewer를 사용할 수 있도록 노력하고 있습니다.vb.net의보고 서비스 - 보고서 뷰어

현재 나는 두 개의 버튼 (각 보고서 1)가 그래서는 버튼 클릭에 - 나는 데이터를 얻을이 같은 각각의 DataTable에로드하기 위해 SQL 서버에 대해 쿼리 ..

adapter = New SqlDataAdapter(sql, Con) 
    adapter.Fill(ds) 

    ds.Tables(0).TableName = "DataTable1" 
    ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc" 
    DataTable1BindingSource.DataSource = ds 
    ReportViewer1.RefreshReport() 

나는 동일 할 Report2에 대한 것이지만 DataTable2와 나는 EmbededResource를 Report2로 변경하고 DataTable을 DataTable2로 변경합니다.

내 애플리케이션을 실행하기 전에 CHOOSE REPORT에서 보고서 중 하나를 미리 선택해야합니다. 따라서 Report1.rdlc가 미리 선택되어있는 경우 디버그하고 Report1을 실행하면 완벽하게 정상적으로 실행됩니다. 그러나, 그 경우에 Report2를 실행시키지 않을 때.

나는 경우 보고서 뷰어가 비어 만 버튼 중 하나를 사용자가 클릭하면 채워야에서의 Form_Load 이러한 두 가지 기능을 (사용 시도했습니다.

ReportViewer1.Reset() 
ReportViewer1.LocalReport.DataSources.Clear() 

하지만 하더군요

데이터 소스 인스턴스는 데이터 원본을 DataSet1에 대해 제공되지 않았습니다.

답변

0

이없는 많은 사람들이 알고있는 문제가 될 것으로 보인다 때문에 ..... 여기에 해결책은 있습니다. 적어도 나는 같은 문제를 겪을 수있는 다른 사람들을 위해 어떻게 해왔 는가.

강하게 정의 된 DataSet1을 만들었습니다. 그 안에는 정확한 필드가있는 DataTable1이 있는데, 이는 내 쿼리에서 선택하는 것입니다. 또한 Report2 용 DataTable2도 있습니다. 따라서이 코드는 대부분 동일합니다. 두 보고서의 경우 Report2 및 DataTable2에 대한 참조 만 변경합니다.

Me.ReportViewer1.Reset() 

ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc" 
sql = "SELECT RecBy, RecOn from tblNotes" 

adapter = New SqlDataAdapter(sql, Conn) 
adapter.Fill(ds, "DataTable1") 

Dim rds As ReportDataSource = New ReportDataSource("DataSet1", ds.Tables("DataTable1")) 
ReportViewer1.LocalReport.DataSources.Clear() 
ReportViewer1.LocalReport.DataSources.Add(rds) 
ReportViewer1.RefreshReport() 

.... 상단이 필요

Imports System.Data 
Imports System.Data.SqlClient 
Imports Microsoft.Reporting.WinForms