在VS 2010 RDLC中将报表参数传递给SubReport

时间:2011-09-12 12:51:08

标签: c# asp.net rdlc

在VS 2010 RDLC中将报表参数传递给SubReport

我在VS 2010中定义并将报表参数传递给子报表时遇到了一些麻烦。在VS 2008的设计视图中,我能够右键单击并定义报表参数并将其传递。

在VS 2010中,缺少提示。所以我的问题是,如何将父报告中的值传递给VS 2010中的子报告?

此外,这是VS 2010内部的“报告属性”对话框中显示的内容:

目前我已经在XML中手动定义了子报表中的参数,但是当我尝试将任何类型的参数传递给子报表时,我从主报表收到错误。

错误是:

An error occurred during local report processing.

Value cannot be null. Parameter name: value

我没有在任何地方定义名为value的参数。

2 个答案:

答案 0 :(得分:16)

  • 转到子报告 - > 报告数据窗格 - > 参数并添加您要接收的参数。

  • 转到 MainReport - > 右键单击SubReport - > 子报告属性 - > 参数并添加相同的参数名称,并从下拉列表中选择相关值。

  • 处理SubreportProcessing事件并设置子报表的数据源。在我的例子中,主报告数据源的类型为List<Order>,参数为OrderID。示例代码如下。

ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SetSubDataSource);
public void SetSubDataSource(object sender, SubreportProcessingEventArgs e)
{
    var mainSource = ((LocalReport) sender).DataSources["MainDataSet1"];
    var orderId = int.Parse(e.Parameters["OrderID"].Values.First());
    var subSource = ((List<Order>)mainSource.Value).Single(o => o.OrderID == orderId).Suppliers;
    e.DataSources.Add(new ReportDataSource("SubDataSet1", subSource));
}

答案 1 :(得分:0)

var subSource =((List)mainSource.Value).Single(o =&gt; o.OrderID == orderId)。供应商;

意思是什么