Динамическое изменение изображения в Crystal Report во время выполнения - PullRequest
12 голосов
/ 24 сентября 2008

Я использую Crystal Reports, включенный в VisualStudio 2005. Я хотел бы в идеале изменить изображение, отображаемое в отчете, путем создания пути к файлу изображения и затем отобразить это изображение в отчете. 1001 *

Кто-нибудь смог сделать это с помощью этой версии Crystal Reports?

Ответы [ 8 ]

7 голосов
/ 21 февраля 2009

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

Редактировать: Стоит отметить, что если вы привязываете свой кристаллический отчет к простым старым объектам, вы хотите предоставить свойству byte [] свойство для отчета, чтобы обрабатывать его как изображение.

2 голосов
/ 24 февраля 2009

Я наконец нашел решение, используя подсказку byte[], опубликованную здесь Джошем.

Это решение применяется, если вы используете простой старый объект C # для заполнения отчетов Crystal Reports (см. http://www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/ для получения информации об этом подходе).

В вашем классе C # введите следующий код:

private static byte[] m_Bitmap = null;

public byte[] Bitmap
{
   get
   {
      FileStream fs = new FileStream(bitmapPath, FileMode.Open);
      BinaryReader br = new BinaryReader(fs);
      int length = (int)br.BaseStream.Length;
      m_Bitmap = new byte[length];
      m_Bitmap = br.ReadBytes(length);
      br.Close();
      fs.Close();
      return m_Bitmap;
   }
}

Теперь обновите сопоставление объектов C # в CR, используя опцию «Проверка базы данных». Затем вы должны увидеть свойство Bitmap как поле CR. Просто перетащите его на форму. Он будет иметь тип IBlobFieldObject. Когда вы запустите, вы должны увидеть свое изображение.

2 голосов
/ 19 февраля 2009

У меня тоже был этот вопрос (и проголосовал за вас)!

[С тех пор я нашел решение, используя байтовый массив через свойство объекта C # - см. Отдельный ответ. Оставив этот ответ здесь для справки ...]

Вот что я предложил (но я попытался и потерпел неудачу в C # -2005 и C # -2008).

  1. Выберите каталог и поместите в него BMP (например, «C: \ Temp \ image.bmp»).
  2. Из CR-Designer a) Щелкните правой кнопкой мыши -> Insert-> OLE Object ... b) Выберите «Создать из файла» c) Установите флажок «Link» d) Просмотрите и выберите bmp, определенный в шаге 1 e) Нажмите OK. f) Поместите изображение в форму.
  3. Перезаписать / обновить изображение во время выполнения в вашем коде C #. Теоретически, поскольку вы вставили ссылку в файл изображения, он будет обновляться при обновлении формы.

Мне не повезло с таким подходом. Изображение появляется, когда я впервые проектирую форму (шаг 2). Но во время выполнения изображение не обновляется для меня. С этого момента вещи становятся действительно странными . Кажется, что CR кэширует какое-то изображение, которое просто не исчезнет. Я могу удалить ссылку на объект OLE в CR-Designer, но если я воссоздаю ее, я всегда получаю черный ящик того же размера, что и исходное изображение (даже если я изменяю размер image.bmp).

1 голос
/ 28 апреля 2015

Еще одна полезная опция - вставка картинок, которые вы хотели бы использовать. Расположите изображение соответствующим образом, затем щелкните правой кнопкой мыши изображение и перейдите к «Формат графики»> «Общее». Установите флажок Подавить, затем нажмите кнопку формулы, показанную как x-2. В окне формулы просто добавьте код, чтобы определить, следует ли подавлять графику или нет.

В моем случае я создавал один шаблон счета для нескольких организаций. В окне формул я просто написал COMPANY <> 1100, что означало, что каждый раз, когда счет-фактура запускалась для компании, отличной от 1100, графическое изображение 1100 подавлялось.

Надеюсь, это облегчит жизнь ...

1 голос
/ 15 марта 2010

Вы также можете использовать условную формулу, чтобы установить местоположение изображения. См. Crystal Reports: динамические изображения .

1 голос
/ 24 сентября 2008

Попробуйте использовать комбинацию из параметра, содержащего путь к изображению и учебник на этой странице: http://www.idautomation.com/crystal/streaming_crystal.html

Затем на шаге 8 используйте параметр вместо жестко заданного пути.

0 голосов
/ 20 ноября 2018

Текущая версия Crystal Reports (для Visual Studio 2012+), которую я использую с Visual Studio 2015, поддерживает эту функцию. Выполните следующие шаги:

  1. Вставьте картинку в свой отчет. Это будет служить вашим Заполнитель ".
  2. Щелкните правой кнопкой мыши свое изображение и выберите «Формат объекта». Right Click Image
  3. Выберите вкладку Изображение и нажмите кнопку формулы Picture Tab
  4. Откроется окно формулы. Введите формулу, которая найдет ваши фотографии в виде ссылок.

    если ({@} isDonor = "1") затем "http://www.ny.org/images/aaf/picture1.jpg" остальное "http://www.ny.org/images/aaf/picture2.jpg" Formula Editor И все готово!

0 голосов
/ 21 февраля 2009

Точно так же, как сказал Джош. Вам придется нажать на изображение с набором данных. Или поместите изображение в таблицу базы данных один раз и многократно извлекайте его с вложенным отчетом.

...