ですから、私はrdlcに不慣れです(そして実際には一般的に報告しています)。別のテーブルと1対多の関係にあるテーブルがあり、rdlcレポートでアイテムごとに複数のテーブルとしてそれらを表現しようとしています。
注:テーブルは元々、Entity Frameworkコードファーストを使用して作成されています。
2つのテーブル(および親テーブル)は次のとおりです。
さて、通常、[Quotation]
といくつかの[QuotationItem]
sしかない場合は、レポートの上部に[Quotation]
からの情報を追加するだけで、各[QuotationItem]
からの情報がテーブル(Tablix)内の行に表示されます。
問題は:各[QuotationItem]
にも多くの[QuotationItemQuantity]
(現在は3つ)があり、表現されます。
したがって、私のレポートは次のようになります。
しかし、アイテム(QuotationItem)ごとに複数のテーブル(またはリストとテーブル)を表示する方法に固執しています。ネストされたテーブルとリスト内のテーブルを試しましたが、これは許可されていないようです( "詳細メンバーには静的内部メンバーのみを含めることができます"エラーが発生します)。
サブレポートについて読んだので、これが道のりかもしれないと思いますが、この場合のサブレポートの使用方法や、これが実際に正しいアプローチであるかどうかはわかりません。
注:前述のように、各QuotationItem
には現在3つの数量がありますが、将来変更される可能性があるため、列を動的にできると便利ですが、現時点では必須ではありません。
助言がありますか?
まあ、私はもっとエレガントな解決策を手に入れることを望んでいました(そして今でもそうしています)この醜い解決策の代わりに(今のところ使用しなければなりませんでした)しかしそれはとにかくそれが想定されていることをします。
同様の問題を抱えている人に役立つかもしれないので、私はそれを投稿しています。これが私がしたことです:
実際のデータを渡すには、DataTable 設計されたものと同じ構造でを入力し、次のようなものを使用してレポートに渡します。
private void Form_Load(object sender, EventArgs e)
{
rptViewerMain.LocalReport.ReportEmbeddedResource = "MyProjectName.QuotationReport.rdlc";
rptViewerMain.LocalReport.EnableExternalImages = true;
if (QuotationInfo !=null && QuotationItems != null)
{
SetupReport();
}
this.rptViewerMain.RefreshReport();
}
private void SetupReport()
{
var param1 = new ReportParameter("MyFirstParameter", SomeValue);
var param2 = new ReportParameter("MySecondParameter", SomeOtherValue);
// etc
// Pass Parameters
rptViewerMain.LocalReport.SetParameters(new[] { param1, param2, "etc" });
// Prepare the DataTable and add the values to it
DataTable dt = new MyDummyDataset.MyDesignedDataTable().Clone();
foreach (var qItem in QuotationItems)
{
dt.Rows.Add(qItem.ItemNumber, qItem.ItemDescription, "and",
"so", "many", "more", "values");
}
// Pass the DataTable to the report as the data source replacing the dummy DataSet
rptViewerMain.LocalReport.DataSources.Add(new ReportDataSource("MyDummyDataset", dt));
}
注:一部のフィールド/変数名は質問と回答の両方で変更されましたが、考え方は同じです。