Меня зовут Эд, и мне нужно загрузить изображение из ReportView dinamic. Как я могу это сделать? Я работаю с формами Windows, С# 3.0 и linq to sql, мне нужно загрузить изображение в динамические отчеты.
Спасибо.
Меня зовут Эд, и мне нужно загрузить изображение из ReportView dinamic. Как я могу это сделать? Я работаю с формами Windows, С# 3.0 и linq to sql, мне нужно загрузить изображение в динамические отчеты.
Спасибо.
Я предполагаю, что вы используете компонент Microsoft Report Viewer из C# и хотите динамически добавлять изображение в отчет.
Это, безусловно, возможно, вам нужно создать класс со свойством byte[], которое представляет сериализованное растровое изображение.
class ReportImage {
public byte[] Image {get;set;}
// Other stuff here if you want...
}
Установите свойство этого объекта как 24-битную сериализованную версию вашего растрового изображения на пиксель (т. е. сохраните растровое изображение в MemoryStream, затем вызовите MemoryStream.ToArray()). Вы должны использовать 24 бита на пиксель, а формат, который вы сохраняете должен, должен быть BMP, похоже, это требуется в средстве просмотра отчетов.
Затем вы можете выполнить привязку к источнику данных объекта (см. Документацию MSDN для получения подробной информации о привязке к объектам см. также пример здесь). Используйте элемент Изображение, чтобы отобразить свое изображение в отчете.
Ограничение состоит в том, что изображения в вашем отчете должны быть фиксированного размера. Вам придется заранее передискретизировать изображения, чтобы они подошли по размеру, или, как предлагает Джон, динамически создать файл RDLC для отчета.
Этот ответ очень полезен (из-за него у меня в отчете не было маленьких полей с «битым изображением»), но он немного вводит в заблуждение. .
Строго говоря, НЕ требуется, чтобы «изображение» (которое на самом деле является массивом байтов) было в формате BMP. В тестовом проекте мне удалось прочитать jpeg-файлы с диска (т. е. File.ReadAllBytes(filename); ) и добавить полученные массивы байтов в свойство byte[] в списке «rptrow» (где rptrow — это объект, представляющий все данные для одной строки в таблице отчета). Для изображений в отчете для параметра MIMEType установлено значение «image/jpeg», а для свойства «Источник» установлено значение «База данных». Я также заметил, что не имело значения, какой MIMEType я использовал, если что-то было указано (т.е. не пустое).
Я торопился, поэтому даже не подумал проверить утверждение, что это должно быть изображение с разрешением 24 бита на пиксель.
Упрощенный rptobj:
public class rptobj
{
public string FileName { get; set; }
public byte[] Photo { get; set; }
private List<rptobj> photos;
public List<rptobj> GetList()
{
if (photos == null)
{
photos = LoadPhotos();
}
return photos;
}
private List<rptobj> LoadPhotos()
{
var rslt = new List<rptobj>();
byte[] rawData;
var path = HttpContext.Current.Server.MapPath(@"~\images");
DirectoryInfo di = new DirectoryInfo(path);
FileSystemInfo[] fis = di.GetFileSystemInfos("*.jpg");
foreach(var fi in fis){
rawData = File.ReadAllBytes(string.Format(@"{0}\{1}", path, fi.Name ));
rslt.Add(new rptobj() { Photo = rawData, FileName = fi.Name });
}
return rslt;
}
}
Короткий ответ: вы не можете этого сделать, по крайней мере, со встроенными функциями просмотра отчетов.
Однако, если вы уверены, что хотите это сделать, вы можете попытаться динамически создать файлы RDLC. Если вы создаете файлы RDLC динамически, вы можете динамически добавлять изображения в отчеты.
Пример кода динамического создания файлов RDLC можно найти здесь.