C # вытащить отчет из DLL и поместить его в средство просмотра отчетов - PullRequest
3 голосов
/ 14 февраля 2012

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

Assembly assembly = Assembly.LoadFrom("MyAssembly.dll");
Stream stream = assembly.GetManifestResourceStream("MyAssembly.Reports.MyReport.rdlc");
MyReportViewer.LocalReport.LoadReportDefinition(stream);
MyReportViewer.RefreshReport();

Теперь, когда я это делаю, я знаю, что Отчет несколько загружается, потому что я могу установить параметры ReportParameters. Если бы он вообще не загружался, я бы выдал исключение, сообщающее, что параметр не существует или что-то в этом роде.

Что происходит, так это то, что мой Отчет будет загружать указанные параметры, и когда я RefreshReport (), я получаю это.

Источник определения отчета не указан.

Любой ключ к пониманию того, почему это происходит? Я чувствую, что могу что-то упустить, когда дело доходит до загрузки отчетов из DLL. Однако, когда я искал Интернет, казалось, что это было правильное решение.

В качестве примечания, у меня внутри .dll есть форма, по которой я звоню, и загружаю отчеты в совершенно нормальное состояние. Однако это другой случай, потому что эта форма точно знает, где находится этот отчет.

В этой ситуации у меня есть ReportViewer, который не находится внутри .dll, и я пытаюсь загрузить .rdlc, который находится внутри .dll, в мой ReportViewer, который не находится внутри dll.

EDIT В довершение всего, если я использую следующий код, я могу увидеть файл, который мне нужен в DLL.

string[] resources = assembly.GetManifestResourceNames();

"MyApp.Controls.Reports.MyCustomReport.rdlc"

1 Ответ

1 голос
/ 10 декабря 2013

этот маленький кусочек кода в начале процедуры решил мою проблему

 MyReportViewer.Reset();
...