2012-03-29 41 views
1

コンボボックスで選択したテキストに基づいて、ReportViewerコンポーネントで異なるレポートを表示したいが、データソースをレポートにバインドするのが難しいようだ。 「データソース・インスタンスがデータソースDATASET1のために供給されていない」:
これはcomboBox.TextChanged(object sender, EventArgs e)ハンドラレポートをReportViewerコンポーネントに動的にバインドする

reportViewer.Reset(); 
this.reportViewer.LocalReport.ReportEmbeddedResource = "ReportViewer." + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc"; 
this.reportViewer.RefreshReport(); 

に、私はエラーを取得しているコードです。
レポートを動的に読み込むために何が必要なのですか?

答えて

0

A data source instance has not been supplied for the datasource DataSet1

最初のパラメータ名が "DataSet1"であることを確認してください。 .rdlcデザインフォームで新しいデータソースを作成し、 "DataSet1"という名前のデータソースになります。

this.reportViewr.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", 
              yourDataSet.Tables[0])); 
+0

また、正しくバインドされていることを確認するには、レポートに提供するデータ(レポート名などに基づいて)を特定する必要があります。各レポートの予想されるデータ構造は、おそらく異なるでしょう。 – GalacticCowboy

+0

これは私にとってはまったく機能しません。私が作っている間違いがいくつかあります。新しいレポートを作成するプロセスと関係があると思います。私は新しいレポートを作成するたびに、DataSourceとして '' DataSet1 ''を使用しています。私はこれを解決するためにもうどこを見なければならないのかわかりません... –

1

reportViewerのソースレポートを変更するときにも、そのためのデータソースを設定する必要があります。通常、デザイナーがそれを処理します(デザイナーが生成したコードを見て、その処理方法を見てください)が、ソースレポートを変更すると、コントロールのLocalReportオブジェクトがリセットされます。

そのため、あなたはそれが正しく表示できるように、レポートにすべてのデータソースを提供する必要があります。

this.reportViewer.LocalReport.ReportEmbeddedResource = "ReportViewer." + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc"; 
this.reportViewer.LocalReport.Datasource.Add("Datasource1", whateverIsYourDatasourceObject) 
this.reportViewer.RefreshReport(); 

レポートに定義されているすべてのデータソースの同じ行を追加する必要があります。使用する必要があるデータソース名が不明な場合は、デザイナで生成されたコードを見て、それらが何であるかを確認してください。また、すべてのレポートのデータソース名を調べるために、次のコードを使用することができます。レポートは、変数を持っている

this.reportViewer.LocalReport.GetDataSourceNames() 

場合は、そうでない場合は、同じエラーが発生します、あまりにもそれらを定義する必要があります。

あなたはReportPathを残し

+0

これは私のために全く働いていません。私が作っている間違いがいくつかあります。新しいレポートを作成するプロセスと関係があると思います。私は新しいレポートを作成するたびに、DataSourceとして '' DataSet1 ''を使用しています。私はこれを解決するためにもうどこを見なければならないのかわかりません... –

+0

あなたのコードの詳細がなければ、問題が本当に何であるかを知るのは難しいです。 –

1

に役立ちます願っています。

this.reportViewer.LocalReport.ReportPath = "Reports\\" + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc"; 

this.reportViewer.LocalReport.ReportEmbeddedResource = "ReportViewer." + MapComboBoxItem2ReportName(cbReports.Text) + ".rdlc"; 

this.reportViewer.LocalReport.Datasource.Add("Datasource1", whateverIsYourDatasourceObject) 
this.reportViewer.RefreshReport(); 
関連する問題