2013-12-11 3 views
2

Я разрабатываю приложение .Net (C#), которое просматривает отчет (.rdlc) и печатает его.C# report viewer успешное событие печати

В случае успешной печати я должен обновить некоторый статус в базе данных.

Но проблема не в том, что я знаю, что печать успешна.

Для ReportViewer У меня есть два события:

  • печати Событие: Стреляет, когда пользователь нажимает на кнопку печати на ReportViewer.

  • PrintingBegin Событие: оно срабатывает, когда пользователь нажимает OK внутри диалога печати, но в случае, если принтер находится в автономном режиме или из бумаги ... и т. Д., Никаких указаний не указывается, и приложение не сможет узнать.

Есть ли способ обеспечить успешность процесса печати?

Благодаря

+0

Я собираюсь перенаправить вас к следующему сообщению, он содержит информацию о том, как читать статусы принтера и т. Д. Http://stackoverflow.com/questions/1622903/how-do-i-check-if- a-printer-is-installed-and-ready-using-c – Schuere

+1

Я не знаком с операциями с принтером, но с диким угадыванием. Если вы даете команду печати, вы можете окружить этот код с помощью 'try-catch' и проверьте, не выбрасывается ли какое-либо исключение. –

+0

@Schuere, даже если он знает, что принтер в порядке перед печатью ... это не означает, что печать не выйдет из строя (из достаточной бумаги, любой ошибки, отсоединенного принтера). Более того, он не будет знать, какой пользователь принтера выберет (и с какими параметрами он будет печатать). –

ответ

1

Это не так немедленным (и вы должны справиться с этим по-разному в соответствии с тем, как была начата печать), но вы можете сделать это.

Если пользователи нажимают кнопку «Печать», то: OnPrint метод будет служить запросу. Любое исключение будет обрабатываться (к сожалению, внутренним) UpdateUiStatus. Этот метод (среди прочего) поднимет ReportError событие с информацией об исключениях. Просто добавьте правильный обработчик для этого события, и вы узнаете, что печать не удалась. Обратите внимание, что вы не будете уведомлены о завершении печати без ошибок.

Проблема с этим решением заключается в том, что вы должны понимать, если это событие происходит от принтера или нет (так что вам нужно иметь дело с деталями исключения).

Другой способ заключается в том, чтобы скрыть кнопку печати по умолчанию, открытую элементом управления ReportViewer, если вы вызываете метод Print, то вы можете поймать все исключения, и вы узнаете, когда начнется печать, и если это сработает или нет.

+0

метод, который обрабатывает событие ReportError средства просмотра отчетов никогда не вызывается, если принтер делает ошибку. Мне что-то не хватает? –

+0

@AbdelRahmanShabana в соответствии с исходным кодом (версия 11) ... да, это должно быть. OnPrint будет перехватывать исключения и туннелировать их до UpdateUiStatus. Затем он вызовет OnError (что приведет к созданию ReportError). Вы можете проверить, что происходит с отладчиком, загрузить исходный код фрейма и отключить исключения для функции шага по функциям. –