所以,我是rdlc的新手(并且实际上报道了)。我有一个与另一个表有一对多关系的表,我试图在rdlc报告中将它们表示为每个项的多个表。
注意:这些表最初是使用实体框架代码优先创建的。
以下是两个表(和父表):
现在,通常如果我只有[Quotation]
和一些[QuotationItem]
,我只需添加报告顶部[Quotation]
的信息,以及来自每个[QuotationItem]
将在表格(Tablix)中的一行中表示。
问题:每个[QuotationItem]
也有许多 [QuotationItemQuantity]
(目前为三个),他们也需要代表。< / p>
所以,我的报告应该是这样的:
但我仍然坚持如何为每个项目(QuotationItem)显示多个表(或列表和表)。我在列表中尝试了嵌套的表和表,但似乎不允许这样(我得到一个“详细信息成员只能包含静态内部成员”错误。)
我读到了关于子报告的内容,我认为这可能是要走的路,但我不确定在这种情况下如何使用子报告,或者这实际上是正确的方法。
注意:如上所述,每个QuotationItem
目前有3个数量,但将来可能会更改,因此如果列可以是动态的,那么会很好,但是,这不是必需的点。
有什么建议吗?
答案 0 :(得分:6)
嗯,我希望(现在仍然)能够获得一个更优雅的解决方案而不是这个丑陋的(我现在必须使用它),但它确实做到了它的假设无论如何。
我发布它可能有助于遇到类似问题的人。这就是我的所作所为:
为了传递实际数据,我将使用与设计的相同的结构填充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));
}
注意:一些字段/变量名称在问题和答案中都有所改变,但这个想法保持不变。