Установка источника изображения в отчете RDLC динамически - PullRequest
17 голосов
/ 28 марта 2011

Я использую возможности создания отчетов на стороне клиента, которые входят в состав Visual Studio 2010. У меня есть определенный файл RDLC, в настоящее время со встроенными изображениями для целей брендинга в верхней части отчета.Изображение является логотипом компании пользователя.Он не имеет ничего общего с данными отчета ... это просто заголовок.

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

Я смотрел на переключение источника со встроенного на внешний и, возможно, создание файла изображения логотипа при запуске программы (логотипы внедряются как ресурсыв отдельной сборке), а затем ссылается на него как на файл с общим именем для источника.Я не уверен, насколько мне нравится этот вариант, так как кажется, взломать.Я также получаю сообщение об ошибке при тестировании явно заданных изображений путей, фактически говоря, что объект не установлен для экземпляра.Например, я даже пытался установить его в D: \ test.jpg, и получил эту ошибку во время разработки ... поэтому я неохотно пробую эту опцию.

Я такжесмотрел на вызов класса в ссылочной сборке из файла RDLC, но я не могу заставить его работать.Похоже, я могу ссылаться на сборку, а затем вызывать через специальный объект с именем Code.Поскольку мой класс статический, он должен быть Code.className.method, но это не сработает.

Я также рассмотрел возможность разбить заголовок на подотчет, но все равно не думаю, чтоЯ решил проблему с зависимостями.Это все еще потребует того же количества обслуживания.

Я должен упомянуть, что я использую объекты в качестве источника данных.Какой вариант мне выбрать?Я что-то упускаю из виду?

Ответы [ 2 ]

22 голосов
/ 20 апреля 2011

Поскольку нет альтернативных (или каких-либо!) Мнений по этому вопросу, я продвинулся дальше и нашел рабочее решение.

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

В отчете RDLC я создал параметр с именем Path типа Text. Затем в свойствах для изображения я изменил изображение логотипа со встроенного на внешний и установил «Использовать это изображение» в качестве параметра: [@Path].

Затем в коде я передаю путь к файлу в качестве параметра Path. Но раньше я ошибался в том, что путь должен быть URL-адресом, и я пытался передать местоположение на диске. Итак, эта часть должна выглядеть так:

        ReportParameter paramLogo = new ReportParameter();
        paramLogo.Name = "Path";
        paramLogo.Values.Add(@"file:///C:\Users\Mike\AppData\Local\Temp\Logo.png");
        reportViewer.LocalReport.SetParameters(paramLogo);

Я скажу, что документация MSDN могла бы быть немного лучше. К их чести, есть много подробных документов о том, как сделать что-то на более высоком уровне. Эта статья помогла. В нем четко сказано, что мне нужен URL-адрес пути, но было бы проще проверить это свойство непосредственно в библиотеке. Однако найти документацию более низкого уровня было сложнее и менее плодотворно. Вот статья для объекта Reporting Image. Не так много возможностей установить интересующие вас свойства.

12 голосов
/ 16 января 2014

У меня была такая же проблема, но принятое решение не совсем помогло мне. Оказывается, мне нужно было установить для EnableExternalImages значение true, а также указать путь в формате URI и задать для моего Image.Value значение =Parameters!ReportLogo.Value.

.
report.EnableExternalImages = true;
ReportParameter[]  parameters = new ReportParameter[3];
...
Uri pathAsUri =  new Uri(_info.LogoPath);
parameters[2] = new ReportParameter("ReportLogo", pathAsUri.AbsoluteUri);
report.SetParameters(parameters);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...