2009-04-24 4 views
0

Меня зовут Эд, и мне нужно загрузить изображение из динамического отчета ReportView. Как я могу это сделать? Я обрабатываю формы окон, C# 3.0 и linq для sql, мне нужно загрузить изображение в мои динамические отчеты.Загрузить изображение в ReportView динамически

Спасибо.

+1

Ваш вопрос ужасно отформатирована. Почему вы положили все это в теги «code»? –

ответ

-1

Короткий ответ: вы не можете этого сделать, по крайней мере, не со встроенными функциями просмотра отчетов.

Однако, если вы уверены, что хотите это сделать, вы можете попытаться динамически создавать файлы RDLC. Если вы создаете файлы RDLC динамически, вы можете динамически добавлять изображения в отчеты.

Вы можете найти пример кода о том, как создавать файлы RDLC динамически here.

+2

Этот ответ просто неверен. Это можно сделать, как показывает ответ Питера Тейта. –

+0

Спасибо, что указали, что Мэтью. Я также исправил исходное сообщение для вас. – jgallant

2

Я предполагаю, что вы используете компонент Microsoft View Viewer из C# и хотите динамически добавлять изображение в отчет.

Это, безусловно, возможно, вам нужно создать класс с свойством byte [], представляющим сериализованное растровое изображение.

class ReportImage { 
    public byte[] Image {get;set;} 

    // Other stuff here if you want... 
} 

Установите свойство этого объекта в 24 бит на пиксель в последовательную форму версии растрового (т.е. сохранить растровое изображение в MemoryStream, а затем вызвать MemoryStream.ToArray()). Вы должны использовать 24 бита на пиксель, а формат, который вы сохраняете до , должен быть быть BMP, это, похоже, требуется в средстве просмотра отчетов.

Затем вы можете привязываться к объекту Data Data Source (см. MSDN documentation для получения дополнительной информации о привязке к объектам, см. Также пример here). Используйте элемент «Изображение», чтобы отобразить изображение в отчете.

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

2

This answer очень полезный (он получил меня, когда у меня было небольшое количество «сломанных изображений» в моем отчете), но немного вводит в заблуждение.

Это, строго говоря, НЕ требование, чтобы «образ» (который фактически является байтовым массивом) был BMP-форматом. В тестовом проекте мне удалось прочитать jpeg-файлы с диска (то есть File.ReadAllBytes (filename);) и добавить результирующие массивы байтов в свойство byte [] в списке «rptrow» (где rptrow - это объект, представляющий все данные для одной строки в таблице отчетов). У изображений в отчете был установлен тип MIMEType «image/jpeg» и свойство Source «База данных». Я также заметил, что неважно, какой MIMEType я использовал, пока что-то было указано (т. Е. Не пусто).

Я спешил, поэтому даже не стал проверять утверждение о том, что это должно быть изображение 24bpp.

упрощенный 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; 
    } 
} 
Смежные вопросы