www.gotreportviewer.comと RDL ビューアーの例 (右側の最後のサンプル) を確認してください。RDLC をロードし、XML ファイルを解析してパラメーター、接続情報、およびクエリ情報を取得するためのコードが既に含まれています。バックエンドを使用してすべてを取得し、レポートを作成/ロードして実行できるはずです。
RDLC のどこかにヒントまたはコメントを追加して、どの呼び出しを行うかを指定する限り、代わりにレポート名をヒントとして使用することをお勧めします。レポートがデータをロードするために何を呼び出すかを知るために、過去にこれを行いました。
私たちは以前にこのようなことをしました:
VB バージョン:
Select Case GetReportName()
Case "SiteEval"
Using adp As New DataSetsTableAdapters.SiteEvalTableAdapter, _
objDT As New DataSets.SiteEvalDataTable
adp.Fill(objDT)
objLR.DataSources.Add(New ReportDataSource("DataSets_SiteEval", objDT))
End Using
Case ....
C# バージョン:
switch (GetReportName()) {
case "SiteEval":
using (DataSetsTableAdapters.SiteEvalTableAdapter adp = new DataSetsTableAdapters.SiteEvalTableAdapter()) {
using (DataSets.SiteEvalDataTable objDT = new DataSets.SiteEvalDataTable()) {
adp.Fill(objDT);
objLR.DataSources.Add(new ReportDataSource("DataSets_SiteEval", objDT));
}
}
break;
XSD とデータセットを活用して、レポートを読み込みます。この場合、ローカル レポートは DB にアクセスできます。あなたの場合、このアイデアを利用して、サービスへの呼び出しから返された独自のデータテーブルでデータセットを埋めることができます。大量のレポートがある場合、これは最も洗練された、または維持するのが最も簡単ではありません。
この例では、RDL ビューアーの例を使用して、必要に応じて変更しているため、上記のコードは必要ありません。RDLC ファイルへのパスを渡すだけで、コードは RDLC の xml を読み取って必要なものをロードします。ただし、この場合、ローカル レポートは DB にアクセスできます。上記のコードのアイデアを使用するか、現在行っているようにwww.gotreportviewer.comの RDL ビューアーの例を変更して、外部ソースからデータを取得するように変更することはそれほど難しくないと思います。
RDL ビューアーの例を修正すると、現在、このようなことが少し進行中です (まだ作業中です...) コードは VB です。
Dim r As New Report(Server.MapPath("App_Reports/" & GetReportName() & ".rdlc"), GetReportName())
Dim p As ReportParameterInfoCollection = r.GetParameters() 'read only....
If p.Count > 0 Then
Dim rptParams(p.Count - 1) As ReportParameter
Dim i As Integer = 0
For Each param In p
rptParams(i) = New ReportParameter(param.Name)
rptParams(i).Values.Add("99999999")
i += 1
Next
r.SetParameters(rptParams)
End If
r.LoadReport()
さようなら、醜くて長い switch ステートメント。さようなら、レポートをロードする方法を知る必要があります....パラメーターをもう少し適切に処理する方法を理解できれば.... ..
私もリフレクションで同じことをして遊んでいます。リフレクション作業を簡単にするこの記事を見つけました。
http://www.slimee.com/2009/09/net-using-reflection-to-execute.html
これで、データ テーブルの文字列を渡すだけで、レポートを駆動するデータ テーブルが生成されます。データセットを使用すると、名前がどのように作成されるかを常に知ることができるため、これを簡単に操作できます。
どちらのアプローチも、見苦しい switch ステートメントを排除し、コードの保守を容易にするソリューションであると私は考えています。リフレクションを使用すると、コードははるかに小さくなりますが、少し遅くなる可能性があります。
両方とも、魔法の文字列の問題が少しあります。行のどこかで、実行したいものの文字列を渡す必要があります。チームは、簡単に解決できる規則を簡単に作成できます....