2016-12-01 3 views
0

画像パスなしでCrystalレポートに画像を表示する方法 私はID(int)とPic(image)を持つデータベースCARDを持っています。Crystallレポートに画像をプログラムで追加する

私はバイト(=列= IDタイプ=文字列 PICタイプの結晶レポートdtCardにデータテーブルを追加)

ここでレポートを表示するために私のコード:

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

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 

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

私が走っているときコード、エラーはありませんが画像は表示されません。 Crystalレポートの "System.Byte()"のみ。

この問題をどのように修正しますか? クリスタルレポートにデータベースの画像が表示されます。

敬具、 surbakti

+0

あなたのスキーマでは、画像列のデータ型は、

+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 

名以下のようなあなたのコントロール:= Form1の CrystalReport = crpt

ボタン= Button1の のCrystalReportViewer = CRV

フォーム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> 
関連する問題