Динамично изменитесь, изображение в Кристалле Являются во время выполнения

tl; dr

  1. В ECMAScript 5 это невозможно.
  2. В ECMAScript 2015 это возможно с Map s.
  3. В ECMAScript 2017 это было бы легко доступно.

ECMAScript 5:

Нет, это невозможно с объектами.

Вы должны либо итерации с помощью for..in , либо Object.keys , как это

for (var key in dictionary) {
    // check if the property/key is defined in the object itself, not in parent
    if (dictionary.hasOwnProperty(key)) {           
        console.log(key, dictionary[key]);
    }
}

Примечание: Условие if, указанное выше, необходимо, только если вы хотите итерировать свойства, которые являются dictionary самим объектом. Поскольку for..in будет перебирать все унаследованные перечислимые свойства.

Или

Object.keys(dictionary).forEach(function(key) {
    console.log(key, dictionary[key]);
});

ECMAScript 2015

В ECMAScript 2015 вы можете использовать Map объектов и итерации их с помощью Map.prototype.entries . Пример цитаты из этой страницы,

var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");

var mapIter = myMap.entries();

console.log(mapIter.next().value); // ["0", "foo"]
console.log(mapIter.next().value); // [1, "bar"]
console.log(mapIter.next().value); // [Object, "baz"]

Или итерации с помощью for..of , как это

'use strict';

var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");

for (const entry of myMap.entries()) {
  console.log(entry);
}

Выход

[ '0', 'foo' ]
[ 1, 'bar' ]
[ {}, 'baz' ]

Или

for (const [key, value] of myMap.entries()) {
  console.log(key, value);
}

Выход

0 foo
1 bar
{} baz

ECMAScript 2017

В ECMAScript 2017 будет введена новая функция Object.entries . Вы можете использовать это для итерации объекта по своему желанию.

'use strict';

const object = {'a': 1, 'b': 2, 'c' : 3};
for (const [key, value] of Object.entries(object)) {
  console.log(key, value);
}

Выход

a 1
b 2
c 3

13
задан Phillip Wells 2 October 2008 в 15:25
поделиться

6 ответов

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

Править: Это стоит отметить при привязке кристаллического отчета простым объектам, Вы хотите выставить байт [] свойство для отчета рассматривать это как изображение.

7
ответ дан 2 December 2019 в 00:19
поделиться

Я наконец достиг решения с помощью byte[] подсказка, отправленная здесь Josh.

Это решение применяется при использовании простого Объекта 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 использование опции "Verify Database". Необходимо затем видеть Bitmap свойство как поле CR. Просто перетащите его на форму. Это будет иметь тип IBlobFieldObject. Когда Вы работаете, необходимо видеть изображение.

2
ответ дан 2 December 2019 в 00:19
поделиться

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

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

Вот то, что я видел предложенный (но я попробовал и отказавший и в C#-2005 и в C#-2008).

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

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

2
ответ дан 2 December 2019 в 00:19
поделиться

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

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

1
ответ дан 2 December 2019 в 00:19
поделиться

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

0
ответ дан 2 December 2019 в 00:19
поделиться

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

1
ответ дан 2 December 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: