Загрузить изображение в ReportView динамически - PullRequest
0 голосов
/ 24 апреля 2009

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 мая 2009

Я предполагаю, что вы используете компонент 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 для отчета.

2 голосов
/ 29 июля 2010

Этот ответ очень полезен (он заставил меня забыть, что в моем отчете есть небольшие "разбитые изображения"), но немного вводит в заблуждение.

Строго говоря, это НЕ требование, чтобы "изображение" (которое фактически является байтовым массивом) было форматом BMP. В тестовом проекте я смог прочитать файлы jpeg с диска (то есть File.ReadAllBytes (filename);) и добавить полученные байтовые массивы к свойству byte [] в списке «rptrow» (где rptrow - объект, который представляет все данные для одной строки в таблице отчета). Для изображений в отчете для MIMEType было установлено значение «image / jpeg», а для свойства «Источник» - «База данных». Я также заметил, что не имеет значения, какой 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;
    }
}
0 голосов
/ 05 мая 2009

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

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

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

...