Как загрузить изображение, сохраненное в базе данных, в Visual Studio ReportViewer 2008? - PullRequest
2 голосов
/ 05 мая 2009

Кто-нибудь знает, как я могу сохранить изображение в базе данных и показать его в ReportViewer 2008?

Спасибо !!

1 Ответ

1 голос
/ 05 мая 2009

Я сейчас занимаюсь этим, однако достичь этого было нелегко.

Я создал класс, который генерирует файлы RDLC в MemoryStream. Поток памяти RDLC отправляется в элемент управления reportViewer, который в свою очередь отображает отчет.

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

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

РЕДАКТИРОВАТЬ (Подробнее)

Вы можете получить пример кода для динамического создания файлов RDLC в GotReportViewer . Прямая ссылка на код для VB.NET и C # .

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

Теперь, чтобы генерировать изображения, извлеките их из базы данных. Когда вы получите его обратно из базы данных (я использую большие двоичные объекты), вы получите массив байтов. Массив байтов содержит данные для изображения, но я не могу использовать его в текущем состоянии. Чтобы преобразовать его, вы можете сделать что-то вроде этого:

Dim output As String = ""
output = Convert.ToBase64String(imgByteArray)

Полученная выходная строка будет совместима с ReportViewer. Теперь вы можете динамически добавить эту строку в файл RDLC ReportViewer (файл XML). Используя примеры кода из GotReportViewer, вы можете сделать следующее:

  'Inserts embedded images into the report
  Overridable Function CreateEmbeddedImages() As Rdl.EmbeddedImagesType
    Dim bgCell As New Rdl.EmbeddedImageType
    Dim images As New Rdl.EmbeddedImagesType

    bgCell.Name = "bgTableHeader"
    bgCell.Items = New Object() {"image/jpeg", output}
    bgCell.ItemsElementName = New Rdl.ItemsChoiceType35() {Rdl.ItemsChoiceType35.MIMEType, Rdl.ItemsChoiceType35.ImageData}

    images.EmbeddedImage = New Rdl.EmbeddedImageType() {bgCell}
    Return images

  End Function

Тип RDL - это файл класса языка определения отчета. В основном это обратная схема RDLC XSD. Он содержит классы, которые будут использоваться для создания действительного файла XML для ваших отчетов. Он включен в ссылку GotReportViewer вверху, но вы можете создать ее самостоятельно с помощью инструмента XSD.EXE, поставляемого с Visual Studio.

...