ReportViewer
1 つのフォームとコントロールに固執し、実行時にさまざまなレポートとデータ ソースを割り当てたいと考えています。これに対する多様で複雑な解決策が、Google の簡単なチェックで明らかになったので、むしろここで質問するようになりました。どうすればこれを達成できますか?
2 に答える
ReportViewer コントロール、RDLC レポート、およびデータ ソースを備えたフォームが必要です。これを実装するにはいくつかの方法がある可能性がありますが、それぞれが特定のレポートを表示するメソッド (例: 、 など) を公開する「レポート マネージャー」クラスを持つことShowOrdersReport()
がShowTimeSheetReport()
できReportBase
ますShow()
。必要に応じてパラメーター...何が機能しても、基本的には次のようになります。
var reportForm = new ReportViewerForm(); // instantiate the form
// load the report definition into the viewer:
reportForm.reportViewer1.LocalReport.ReportEmbeddedResource = "Namespace.Report.rdlc";
// loading the data works great with a DataSet:
var data = _reportingDataSet.Tables[0];
// create the ReportDataSource with the report data:
var reportDataSource = new ReportDataSource("rdsReportDataSource", data);
reportForm.ShowReport(new[] { reportDataSource });
_reportingDataSet
ここで依存関係を注入します。パラメーター化されたストアド プロシージャを使用している場合は、DataSet を設定する前に、レポート パラメーターの入力を求める必要があります。
このShowReport()
メソッドは、データ ソースを に追加し、指定したレポートを表示するLocalReport.DataSources
を呼び出しRefreshReport()
ます。
public void ShowReport(IEnumerable<ReportDataSource> dataSources)
{
foreach (var dataSource in dataSources)
reportViewer1.LocalReport.DataSources.Add(dataSource);
reportViewer1.RefreshReport();
}
Crystal レポートを使用している場合は、[レポートの読み込み] ボタンをクリックしてこれを使用します CrystalReportViewer.ReportSource = ReportName
MS ReportViewer コントロールを使用している場合、レポートを表示するには 2 つの重要な手順が必要です
- レポート ファイル パスを ReportViewer に割り当てる
- データ ソースを設定する
たとえば、reportViewer1 という名前の ReportViewer コントロールは SomeReport.rdlc ファイルを表示する必要があり、次のコードが必要です (ボタンをクリックするとしましょう)。
this.reportViewer1.LocalReport.ReportPath = @"Add absolute path of rdlc file"//e.g. @"C:\SomeReport.rdlc" ;
this.reportViewer1.RefreshReport();
これは単純な例にすぎません。データベースからデータを表示する必要がある場合は、単純にするために静的レポートを使用しました。たとえば、RefreshReport を呼び出す前に datasource プロパティを割り当てるだけです。
this.reportViewer1.LocalReport.DataSources.Add(MyreportDataSource);
ここで、MyreportDataSource は ReportDataSource タイプのオブジェクトであり、任意の ADO.net DataTable を ReportDataSource オブジェクトに簡単に変換できます。
これだけの情報が役に立てば幸いです。詳細を確認したい場合は、この場所の非常に優れた記事を参照してください。