2016-12-08 7 views
0

私はfrmReportsにレポートビューアを持っています。私は2つのレポート、Report1.rdlcとReport2.rdlcを作成しました。私は強く定義されたDataSetを持っています - 各レポートのための2つのDataTable(1,2)。私は両方のレポートを表示するのに同じreportViewerを使用できるようにしようとしています。vb.netのレポートサービス - レポートビューア

そのボタンのクリックのように、現在、私は2つのボタン(各レポートの1)を持っている - 私は、データを取得し、このような各データテーブルにロードするために、SQL Serverに対してクエリ..

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、Report2の場合はEmbededResourceを、DataTable2の場合はDataTable Bindingに変更します。

私のアプリケーションを実行する前に、レポートの1つをCHOOSE REPORTで事前に選択する必要があります。つまり、Report1.rdlcが事前選択されている場合は、デバッグしてReport1を実行すると問題なく動作します。しかし、その場合、私はReport2を実行させません。

私は

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

。その場合には、レポートビューアが空であり、ユーザーがいずれかのボタンをクリックした場合のみ移入されなければならない(のForm_Loadにこれら2つの関数を使用して試してみたが、それはと言われますデータソース・インスタンスがデータソース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 
関連する問題