2016-12-01 3 views
0

как я могу показать изображение в кристалле без пути изображения. У меня есть база данных CARD с ID (int) и Pic (изображение).Программно Добавить изображение в отчет Crystalall

добавить DataTable в Crystal Report dtCard с колонкой = типа ID = строка ПИК типа = байт()

вот мой код, чтобы показать отчет:

======== ====================================

Dim report As New reportCard 

Dim path As String = Application.StartupPath & "\docReportCard.rpt" 

report.Load(path) 

Dim dt As New DataTable("dtCard") 

dt.Columns.Add("Id") 
dt.Columns.Add("pic") 

// dtData return value from database 

Dim row As DataRow = dt.NewRow 
row("Id") = dtData.Rows(0).Item("id") 
row("pic") = DirectCast(dtData.Rows(0).Item("pic"), Byte()) 

dt.Rows.Add(row) 

report.Database.Tables("dtCard").SetDataSource(dt) 
CrystalReportViewer1.ReportSource = report 

======= ===========================================

Когда я бегу код, ничего ошибки, но изображение не может показать. Только "System.Byte()" в хрустальном отчете.

как я исправить эту проблему? Я хочу, чтобы Pic из базы данных появился в моем отчете о кристалле.

С наилучшими пожеланиями, surbakti

+0

В вашей схеме t его тип данных столбца изображения должен быть

+0

здесь код из моей схемы: . но неподвижное изображение не отображается. Есть идеи? – Surbakti

+0

Если вы устанавливаете свою схему как источник данных своего отчета во время разработки, тип данных столбца изображения должен быть IBlobFieldObject –

ответ

0

Создать новый проект с 1 формой и 1 CrystalReport. Форма должна иметь 1 кнопку и 1 элемент управления CrystalReportViewer. Вставьте этот код в окно кода формы.

Public Class Form1 
Dim table As New DataTable("test") 
Dim column As DataColumn 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    table = New DataTable("test") 
    With table 
     column = New DataColumn 
     With column 
      .ColumnName = "id" 
      .DataType = GetType(Integer) 
      .AutoIncrement = True 
      .AutoIncrementSeed = 0 
      .AutoIncrementStep = 1 
     End With 
     .Columns.Add(column) 

     column = New DataColumn 
     With column 
      .ColumnName = "pic" 
      .DataType = GetType(Byte())     
     End With 
     .Columns.Add(column) 
    End With 

    ' create XSD file for report datasource 
    ' uncomment this line on first run to create the datasource schema of your crystal report document. 
    ' Once schema is created, point your crystal report document's datasource to its location 
    ' After setting the data source, when you drag the "pic" column, its datatype will be IBlobFieldObject. 
    'table.WriteXmlSchema("E:\TMP\TestReport.XSD") 

    ' uncomment the following on succeeding runs, i.e. after setting the data source in the crystal report file 
    'ShowReport() 
End Sub 






Private Sub ShowReport() 
    Dim row As DataRow 
    row = table.NewRow 
    row("pic") = GetImageData(<PATH YO YOUR IMAGE FILE>) 
    table.Rows.Add(row) 
    table.AcceptChanges() 

    Dim crpt As New crpt 
    crpt.SetDataSource(table) 

    crv.ReportSource = crpt 
End Sub 






Public Function GetImageData(ByVal cFileName As String) As Byte() 
    Dim fs As System.IO.FileStream = _ 
      New System.IO.FileStream(cFileName, _ 
      System.IO.FileMode.Open, System.IO.FileAccess.Read) 
    Dim br As System.IO.BinaryReader = New System.IO.BinaryReader(fs) 
    Return (br.ReadBytes(Convert.ToInt32(br.BaseStream.Length))) 
End Function 
End Class 

Имя ваши средства управления, такие как следующие:

Button = Button1 CrystalReportViewer = CRV

Форма = Form1 CrystalReport = CrPt

TestReport.XSD содержит следующее:

<?xml version="1.0" standalone="yes"?> 
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="test" msdata:UseCurrentLocale="true"> 
<xs:complexType> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
    <xs:element name="test"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="id" msdata:AutoIncrement="true" type="xs:int" minOccurs="0" /> 
      <xs:element name="pic" type="xs:base64Binary" minOccurs="0" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:choice> 
</xs:complexType> 
</xs:element> 
</xs:schema> 
Смежные вопросы