C# 如何处理ReportViewerWebPart报告打印错误?

C# 如何处理ReportViewerWebPart报告打印错误?,c#,sharepoint,reporting-services,C#,Sharepoint,Reporting Services,我正在实施一个基于SharePoint 2010和MS Reporting Server的解决方案。我遇到ReportViewerWebPart问题。我有一个场景,当报表无法打印时,我需要显示一个自定义错误。遗憾的是,与ReportViewer asp控件不同,ReportViewerWebPart没有任何属性/事件指示存在错误且无法打印报告。在这个问题上花了一些时间之后,我想出了一个使用反射的解决方案。我发现ReportViewerWebPart在内部使用ReportViewer,并在这个私有

我正在实施一个基于SharePoint 2010和MS Reporting Server的解决方案。我遇到ReportViewerWebPart问题。我有一个场景,当报表无法打印时,我需要显示一个自定义错误。遗憾的是,与ReportViewer asp控件不同,ReportViewerWebPart没有任何属性/事件指示存在错误且无法打印报告。在这个问题上花了一些时间之后,我想出了一个使用反射的解决方案。我发现ReportViewerWebPart在内部使用ReportViewer,并在这个私有内部组件上附加了ReportError事件。这是我的密码:

…
            try
            {
                ReportViewer rv = (reportViewer.GetType().GetField("m_reportViewer", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(reportViewer) as ReportViewer);
                rv.ReportError += new Microsoft.Reporting.WebForms.ReportErrorEventHandler(ReportWidgetControl_ReportError);
            }
            catch(Exception e)
            {
                LogHandler.LogError(e, "Unable to attach ReportViewerWebPart error hadler.");
            }
…
        void ReportWidgetControl_ReportError(object sender, Microsoft.Reporting.WebForms.ReportErrorEventArgs e)
        {
            reportViewer.Visible = false;
            HandleError();
        }

不幸的是,这个解决方案是对web部件的一种攻击。您认为以这种方式使用反射会导致任何问题吗?我是否遗漏了什么,是否有其他方法可以查看报告是否已打印?

这很好,但我会小心捕获所有异常。 看起来您正在隐藏reportViewer并调用HandleError代码,而不管发生什么错误。可能会出现一些较小的异常,这些异常在内部处理时不会出现问题,隐藏reportViewer对象可能不合适。 我不知道你的HandleError代码的作用,但我建议你悄悄地将错误记录到日志表或文件中,直到你发现你正试图处理的确切打印错误,然后只担心如何处理它