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

Pro*_*dip 6 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
Run Code Online (Sandbox Code Playgroud)

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

Ε Г*_*И О 16

  • 转到子报表 - > 报表数据窗格 - > 参数并添加要接收的参数.

  • 转到MainReport - > 右键单击SubReport - > Subreport Properties - > Parameters并添加相同的参数名称,然后从下拉列表中选择相关值.

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

ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SetSubDataSource);
Run Code Online (Sandbox Code Playgroud)
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));
}
Run Code Online (Sandbox Code Playgroud)