ReportViewer在子报表中得到空错误

本文关键字:错误 报表 ReportViewer | 更新日期: 2023-09-27 18:05:04

我正在用。net 4.0和c#在Visual Studio 2010中构建一个小应用程序,我正在从列表中生成一个ReportViewer-report。然后在我的表中有一个子报表,它应该从webblink传递一个名为ProviderIdentifier的属性值。我在报告上实现subreportprocessing -事件,以将数据返回给子报告,如下所示:

private void localReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
    List<WebLink> links = LinkProvider.FetchSublinks(LinkProvider.Fetch(new WebLink(new Uri("http://www.contentstudio.se/"))));
    e.DataSources.Add(new ReportDataSource("ParentLinks", links));
}

目前,我为子报表的所有实例返回相同的链接。在我尝试将参数传递给子报表之前,报表可以正常工作。当我使用ProviderIdentifier(我可以在我的报告中毫无问题地显示)添加参数时,我总是得到一个NullReferenceException,消息是"对象引用不设置为对象的实例"。如果我向报告添加一个静态值(如1)而不是传递ProviderIdentifier,也会发生同样的情况。如果我一起删除参数,它工作得很好,但我没有办法确定要返回到子报表的链接。

有谁知道是什么导致这个问题的吗?

完整代码:

public void RenderReport()
{
    LocalReport localReport = new LocalReport
                                    {
                                        ReportPath = ("BrokenLink.rdlc"),
                                        EnableHyperlinks = true,
                                        ShowDetailedSubreportMessages = true
                                    };
    List<WebLink> links = LinkProvider.FetchSublinks(LinkProvider.Fetch(new WebLink(new Uri("http://www.contentstudio.se/"))));
    ReportDataSource reportDataSource = new ReportDataSource("Weblinks", links);
    localReport.DataSources.Add(reportDataSource);
    localReport.SubreportProcessing += localReport_SubreportProcessing;
    const string reportType = "PDF";
    string mimeType;
    string encoding;
    string fileNameExtension;
    //The DeviceInfo settings should be changed based on the reportType
    //http://msdn2.microsoft.com/en-us/library/ms155397.aspx
    const string deviceInfo = "<DeviceInfo>" +
                                "  <OutputFormat>PDF</OutputFormat>" +
                                "  <PageWidth>8.5in</PageWidth>" +
                                "  <PageHeight>11in</PageHeight>" +
                                "  <MarginTop>0.5in</MarginTop>" +
                                "  <MarginLeft>1in</MarginLeft>" +
                                "  <MarginRight>1in</MarginRight>" +
                                "  <MarginBottom>0.5in</MarginBottom>" +
                                "  <DpiX>72</DpiX>" +
                                "  <DpiY>72</DpiY>" +
                                "</DeviceInfo>";
    Warning[] warnings;
    string[] streams;
    //Render the report
    byte[] renderedBytes = localReport.Render(
        reportType,
        deviceInfo,
        out mimeType,
        out encoding,
        out fileNameExtension,
        out streams,
        out warnings);
    File.WriteAllBytes("I:''report.pdf", renderedBytes);
}

ReportViewer在子报表中得到空错误

花了几个小时,我终于找到了我错过的东西。如果你检查一个报告的属性,你可以设置"变量"在那里,我已经测试了很多方法来创建一个匹配的参数来自主报告。我完全错过的是(在网上找不到合适的描述),在编辑器右边的树视图中,你有一个名为"参数"的文件夹。我在那里添加了一个参数,对应于我的主要报告传递的参数,现在它应该工作了!