Я делаю что-то похожее, чтобы в отчетах менялся логотип, но для передачи значения я использую параметры отчета. Я не вижу причин, почему этот общий метод не работал бы, если бы изображения были частью данных.
По сути изображения передаются по двум полям. Первое поле - это значение типа MIME, а второе поле - строка в кодировке Base64, содержащая содержимое изображения.
Шаг 1. Преобразование изображения в кодировку Base64. (Наш код всегда передает ImageFormat.Png
этому методу, чтобы упростить MIME Type)
private static string ConvertImageToBase64(Image image, ImageFormat format)
{
byte[] imageArray;
using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream())
{
image.Save(imageStream, format);
imageArray = new byte[imageStream.Length];
imageStream.Seek(0, System.IO.SeekOrigin.Begin);
imageStream.Read(imageArray, 0, imageStream.Length);
}
return Convert.ToBase64String(imageArray);
}
Шаг 2. Передайте изображение и тип MIME в отчет.
reportParams[0] = new ReportParameter("ReportLogo", base64Logo);
reportParams[1] = new ReportParameter("ReportLogoMimeType", "image/png");
_reportViewer.LocalReport.SetParameters(reportParams);
Шаг 3: В отчете установите следующие свойства изображения (без кавычек):
- MIMEType: "
=Parameters!ReportLogoMimeType.Value
"
- Значение: "
=System.Convert.FromBase64String(Parameters!ReportLogo.Value)
"
- ОБНОВЛЕНИЕ: Как говорит Герардо ниже, источник изображения должен быть установлен в «База данных»
Ловушка для молодых игроков:
Часто изображения выглядят ужасно и, как будто они были масштабированы, даже если вы передаете изображение, которое кажется «правильного размера». Это связано с тем, что отчеты выводятся на печать (300 т / д), а не на экран (обычно 72 или 92 т / д). Исправление заключается в том, чтобы отправить изображение примерно в 3 раза больше, установить его правильный размер в отчете и изменить свойство "Sizing
" на изображении на "FitProportional
".