#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, оно перестает работать и не выдает исключений.