Распечатать файл RDLC без отображения предварительного просмотра при нажатии кнопки формы

#printing #reportviewer #rdlc

#печать #просмотр отчетов #rdlc

Вопрос:

У меня есть C # 4.0 WinForm с нажатием кнопки для печати. В событии загрузки формы я заполняю пользовательский объект и вставляю этот объект в список этого объекта. Объект отображается непосредственно в RDLC в качестве источника данных, и если я использую средство просмотра отчетов, я могу видеть, что мой файл RDLC заполнен правильно. Я нашел ссылку на MSDN для этого (http://msdn.microsoft.com/en-us/library/ms252091.aspx ), но это приводит к сбою при методе экспорта.

Кто-нибудь знает какие-либо хорошие примеры того, как распечатать файл RDLC без использования ReportViewer для предварительного просмотра файла? Я просто хочу нажать кнопку и привязать мой список к файлу RDLC (который у меня уже работает) и распечатать непосредственно на принтере.

есть идеи?

Ответ №1:

Хорошо, итак, ссылка на пошаговое руководство: печать локального отчета без предварительного просмотра на самом деле идеально подходит для моей необходимости распечатать файл RDLC без появления диалогового окна печати. Ошибка, которую я допустил, заключалась в присвоении имени моему ReportDataSource . Как и в примере, MSDN называет его ReportDataSource как «Sales», что соответствует имени файла DataSet в RDLC XML codebehind. Я допустил ошибку, назвав свою ReportDataSource «Продажу», из-за чего они не синхронизировались и не печатались.

Проблема решена!

Комментарии:

1. Ой, это сделало бы это. Рад, что вы разобрались с этим!

2. Я столкнулся с проблемой с этим примером кода из MSDN. Все работает, если я нажимаю кнопку печати (т. Е. выполняю код из образца), но когда я пытаюсь нажать для печати снова (в течение примерно 10 секунд), я получаю сообщение о том, что используется файл EMF, который генерируется методом createStream (процесс не может получить доступ к файлу ‘Sales. EMF’, потому что он используется другим процессом.) и я получаю исключение IOException. Как я могу избежать этого? Мой пользователь будет печатать элементы быстрее, чем файл сможет быть освобожден от блокировки.

3. Хорошо, исправлено. Проблема заключалась в том, что пример MSDN представляет собой единый класс, который предназначен для выполнения один раз, и реализован IDisposable. В моем случае я создал вспомогательный файл класса a, экземпляр которого я создаю один раз при загрузке формы, поэтому функция Dispose () никогда не вызывается, пока не закончится жизненный цикл формы. Итак, вместо реализации IDisposable я вместо этого делаю метод Dispose() закрытым и просто вызываю его явно после выполнения Print(). Таким образом, я удаляю () потоки, которые генерируются, и я не получаю IOExceptions.

4. можем ли мы использовать его для веб-приложений, использующих IIS???? в режиме отладки это работает нормально, но когда мы размещаем приложение в IIS, оно перестает работать и не выдает исключений.