C#报表查看器成功打印事件

C#报表查看器成功打印事件,c#,printing,reportviewer,C#,Printing,Reportviewer,我正在开发一个.Net应用程序(C#),它可以查看报表(.rdlc)并打印报表 如果打印成功,我应该更新数据库中的一些状态 但问题是我找不到一个方法来知道印刷是否成功 对于reportviewer,我有两个事件: 打印事件:当用户单击reportViewer的打印按钮时触发 PrintingBegin事件:当用户在“打印”对话框中单击“确定”时,会触发该事件-但在打印机脱机或缺纸等情况下,不会给出任何指示,应用程序将无法知道 是否有办法确保打印过程成功 谢谢这不是那么直接(你必须根据打印开始

我正在开发一个.Net应用程序(C#),它可以查看报表(.rdlc)并打印报表

如果打印成功,我应该更新数据库中的一些状态

但问题是我找不到一个方法来知道印刷是否成功

对于reportviewer,我有两个事件:

  • 打印事件:当用户单击reportViewer的打印按钮时触发

  • PrintingBegin事件:当用户在“打印”对话框中单击“确定”时,会触发该事件-但在打印机脱机或缺纸等情况下,不会给出任何指示,应用程序将无法知道

是否有办法确保打印过程成功

谢谢

这不是那么直接(你必须根据打印开始的方式以不同的方式处理),但你可以做到

如果用户单击打印按钮,则
ReportViewer
OnPrint
方法将为请求提供服务。任何异常都将由(不幸的是内部的)
updateUstatus
方法处理。该方法(除其他外)将引发带有异常信息的
ReportError
事件。只需为该事件添加一个适当的处理程序,就可以知道打印是否失败。请注意,如果打印完成没有错误,将不会通知您

这个解决方案的问题是,您必须了解它是否是来自打印机的事件(所以您必须处理异常详细信息)


另一种方法是隐藏由
ReportViewer
控件公开的默认打印按钮,如果您直接调用
print
方法,那么您可以捕获所有异常,并且您将知道打印何时开始以及它是否工作。

我将把您重定向到以下帖子,它包含有关如何读取打印机状态等的信息。。。我不熟悉打印机的操作,但有一种猜测,如果您发出打印命令,您可以用
try catch
环绕该代码,并检查是否引发任何异常。@Schuere即使在打印前知道打印机正常……但这并不意味着打印不会失败(纸张不足、任何错误、打印机断开连接). 此外,他不知道用户将选择哪台打印机(以及打印时使用的参数)。@TolgaEvcimen实际上我在报告查看器中生成了一份报告,查看器中包含了一个打印按钮,该按钮在没有我的干预的情况下调用windows打印对话框,很抱歉,我没有更多有用的想法。如果打印机出错,将永远不会调用处理ReportViewer的事件ReportError的方法。我错过了什么吗?@AbdelRahmanShabana根据源代码(版本11)…是的,它应该。OnPrint将捕获异常并将其隧道到UpdateUstatus。然后它将调用OnError(这将引发ReportError)。您可以检查调试器的运行情况,下载框架源代码,并逐个函数中断异常。