Я создал приложение MDI, которое показывает некоторые DataGridViews на разных дочерних формах, которые рассматриваются как отдельное приложение, поскольку они имеют доступ к различным базам данных.Как делиться и вставлять изображения во многие отчеты RDLC
Эти данные необходимо экспортировать в отчетах PDF. Я использовал компонент ReportViewer внутри новой дочерней формы MDI, и я создал новый проект в решении, который содержит только файлы отчетов RDLC в качестве встроенных ресурсов, связанных с каждым приложением. Это было сделано для того, чтобы избежать доступа к папке пользователя внутри папки программы, содержащей каждый файл .RDLC, из соображений безопасности.
Это файлы/папки структура VS Решение:
Solution
|
|_ Classes
| |
| |_ Library Project that contains all the classes used for Data Access...
|
|_ MDIMain
| |
| |_ The main application Project that contains some Core Classes and Forms...
|
|_ Reports (A DLL project that doesn't contain .cs code files, but only folders and RDLC reports)
|
|_ App1
| |
| |_ Report1.rdlc
| |_ Report2.rdlc
| |_ ...
|
|_ App2
|
|_ Report1.rdlc
|_ ...
Все работает отлично, но теперь мне нужно настроить все мои отчеты, вставив логотип, поэтому изображения. Поэтому мне нужно добавить к каждому отчету то же изображение.
Глядя на MSDN документации, кажется, что вы 3 вида возможного источника для изображений:
- «Embedded»: работает только путем встраивания изображения в один файл отчета. Но в моем случае это не действительное решение из-за потери хранилища.
- «Внешний»: указав URL или путь (что бы я хотел сделать).
- «База данных»: укажите поле базы данных, содержащее изображение.
Файлы .rdlc передаются и загружаются внутри окон ReportViewer с использованием библиотеки Reports.dll в качестве источника с использованием синтаксиса «folder.filename».
/*
* reportSource variable is calculated dynamically with the selection on a ComboBox
* that let the use choose a specific report.
* The source format is like this: "Reports.AppNameFolder.Report1.rdlc"
*/
string reportSource = cmbReport.SelectedValue.ToString();
ReportDataSource rds = new ReportDataSource("");
rds.Name = "DataSet";
rds.Value = _reportDataTable;
Assembly assembly = Assembly.LoadFrom("Reports.dll");
UnmanagedMemoryStream reportStream = (UnmanagedMemoryStream)assembly.GetManifestResourceStream(reportSource);
reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.LocalReport.LoadReportDefinition(reportStream);
reportViewer1.LocalReport.DataSources.Add(rds);
reportViewer1.RefreshReport();
Так что, если я хочу, чтобы создать папку, содержащую мои изображения:
- Где я должен поставить его с уверенностью, что тогда папка генерируется вместе с выходом основного проекта ?
- Как я могу сделать ссылку на папку и изображения как в режиме отладки, так и в режиме выпуска, поэтому, когда программа будет установлена в пользовательском клиенте?
Встраивание изображения внутри каждого отчета не является хорошее решение. Решение для базы данных также не подходит для моего случая. Ваше последнее предложение о подрепорте, используемом как заголовок, может быть действительно, но как мне его реализовать? Я создал новый отчет и добавил к нему логотип. Но тогда я не могу ссылаться на него из других отчетов ... –
@CheshireCat из инструментария перетащить и отложить вложенную отчетность и поместить его в целевой отчет, затем щелкнуть правой кнопкой мыши этот объект subreport (gray) => subreport, а затем поместить имя отчет «HeaderReport», например, под именем и использовать этот отчет в виде текстовых полей подзаголовка, и все готово – Monah
Я не знал о компоненте «Subreport»! Во всяком случае, в моих отчетах есть заголовок страницы, в котором есть логотип, заголовок, субтитр и номер страницы/общего номера. Если я правильно понимаю, 'Subreport' следует использовать как' Panel', который содержит все эти элементы управления TextBox и Image. Но если я попытаюсь перетащить Subreport внутри заголовка страницы, он не сдвинется. Я думаю, что невозможно включить Subreport внутри заголовка отчета ... –