monali ali Ответов: 1

Как показать изображение blob-объекта в программе просмотра отчетов cristal


Привет,
Я использую VB.NET в visual studio 2012.
У меня есть форма, которая содержит datagridview, картинку и печать кнопки.
Я создал средство просмотра отчетов cristal для печати содержимого datagridview и изображения, для этого я добавил datatable в witch я добавил поля для столбцов datagridview и поле для изображения (тип поля изображения-байты ()).
Проблема в том, что отображаются все поля datagridview, но изображение не отображается.

Что я уже пробовал:

Когда я нажимаю на кнопку Печать, содержимое datagridview отображается в окне просмотра отчетов Cristal, но изображение не отображается ( я уже перетащил поле изображения в datatable в окно просмотра отчетов cristal, как и в случае с другими полями).
Я попробовал другой метод, который заключается в создании pivcture в представлении отчета Cristal >> Right Clic >> Format Object >> Picture >> X2 >> double clic на поле изображения в datatable . Также с помощью этого метода я получил ошибку "поле blob не может быть использовано в Формуле".
Это код кнопки печати :
Dim dt As New DataTable
   With dt
       .Columns.Add("code")
       .Columns.Add("productnom")
       .Columns.Add("category")
       .Columns.Add("supplier")
       .Columns.Add("qte")
       .Columns.Add("Image", GetType(Byte()))

   End With
   pathUrl = Application.StartupPath & "\logo.png"
   Dim img As Image = Image.FromFile(pathUrl)
   Dim dr As DataRow = dt.NewRow()
   dr("Image") = imageToByteArray(img) ' The function imageToByteArray is already created

   dt.Rows.Add(dr)

   For Each dgr As DataGridViewRow In Me.Datagridview1.Rows
       dt.Rows.Add(dgr.Cells(0).Value, dgr.Cells(1).Value, dgr.Cells(2).Value, dgr.Cells(3).Value, dgr.Cells(4).Value)
   Next

   Dim reportDocument As CrystalDecisions.CrystalReports.Engine.ReportDocument
   reportDocument = New CrystalReport1
   reportDocument.SetDataSource(dt)
   FormPrint.CrystalReportViewer1.ReportSource = reportDocument
   FormPrint.ShowDialog()
   FormPrint.Dispose()


А код функции imageToByteArray таков :

Public Function imageToByteArray(imageIn As System.Drawing.Image) As Byte()
        Dim ms As New MemoryStream()
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
        Return ms.ToArray()
        
End Function


Плз, если бы кто-нибудь мог мне помочь . Спасибо

1 Ответов

Рейтинг:
10

monali ali

Я решил эту проблему, изменив ImageFormat в функции

imageToByteArray ()
в формате PNG вместо GIF, потому что отчеты cristal не принимают формат GIF.
обновленная функция :
Public Function imageToByteArray(imageIn As System.Drawing.Image) As Byte()
        Dim ms As New MemoryStream()
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.PNG)
        Return ms.ToArray()
        
End Function