Skip to main content
 首页 » 编程设计

c#之ReportViewerWebPart报表打印错误如何处理

2024年01月01日39tintown

我正在实现基于 SharePoint 2010 和 MS Reporting Server 的解决方案。我在使用 ReportViewerWepPart 时遇到问题。我有一个场景,我需要在无法打印报告时显示自定义错误。遗憾的是,与 ReportViewer asp 控件不同,ReportViewerWepPart 没有任何属性/事件指示出现错误且无法打印报表。在花了一些时间解决这个问题之后,我想出了一个使用反射的解决方案。我发现 ReportViewerWepPart 在内部使用 ReportViewer 并且我在这个私有(private)内部组件上附加了 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 部件中的 hack。您认为以这种方式使用反射会导致任何问题吗?我是否遗漏了什么,还有其他方法可以查看报告是否已打印吗?

请您参考如下方法:

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