Динамическое изменение изображения в Crystal Reports во время выполнения

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

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

Ответ 1

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

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

Ответ 2

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

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

Вот что я видел (но я пробовал и не работал как на С# -2005, так и на С# -2008).

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

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

Ответ 3

Наконец-то я пришел к решению с помощью наконечника byte[], размещенного здесь Джошем.

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

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

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;
   }
}

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

Ответ 4

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

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

Ответ 6

Другим вариантом, который я нашел полезным, является вставка изображений, которые вы хотели бы использовать. Поместите графику соответственно, затем щелкните правой кнопкой мыши графику и перейдите в "Формат" > "Обычный". Установите флажок "Подавить", затем нажмите кнопку "Формула", показанная как x-2. Как только в окне формулы просто добавьте код для определения, следует ли подавлять графику или нет.

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

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

Ответ 7

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