Отобразить отчет .RDLC, встроенный в файл DLL - PullRequest
38 голосов
/ 31 октября 2008

У меня есть отчет, который используется службой Windows и приложением формы. Итак, я хочу поместить отчет в файл DLL, который может использоваться обоими.

Проблема в том, что если я попытаюсь установить свойство ReportEmbeddedResource элемента управления ReportViewer в моем приложении формы Windows, оно будет искать приложение формы Windows, а не файл DLL.

Например: код из окна приложения формы:

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"

Как заставить указанную выше команду искать встроенный ресурс в моем DLL-файле?

Ответы [ 3 ]

54 голосов
/ 11 декабря 2008

Что-то вроде этого должно сделать это:

Assembly assembly = Assembly.LoadFrom("Reports.dll");
Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);
23 голосов
/ 26 июля 2010

Просто используйте полное пространство имен сборки, затем имена папок и затем имя файла:

rv.LocalReport.ReportEmbeddedResource = 
    "My.Assembly.Namespace.Folder1.Folder2.MyReport.rdlc";

Затем убедитесь, что файл отчета задан как встроенный ресурс с использованием панели свойств.

11 голосов
/ 04 ноября 2008

Вероятно, лучше всего было бы получить поток к ресурсу RDLC из другой сборки, а затем передать его в метод "LoadReportDefinition" элемента управления Report Viewer.

Подробную информацию о том, как получить поток из встроенного ресурса в другой сборке, можно найти здесь: Получение ресурсов с помощью класса ResourceManager

Кроме того, вам необходимо обратиться к встроенному ресурсу, используя его полный путь к пространству имен.

например. если у вас есть приложение с пространством имен по умолчанию TheApp , и вы храните отчет с именем " MyReport.rdlc " в папке с именем " Reports ", Ссылка на отчетный вызов будет: -

rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";
...