Step1:数据库文件版本 如果你在数据库中采用了二进制字段存储图片文件 微软 Access 里这些字段叫作 OLE 字段,而Oracle和SQL Server把它们称作 BLOB (二进制大型对象) 字段 那么在报表上显示出来就非常之简单 因为之前我没有做过类的显示图片文件的报表,等

Step1:数据库文件版本

如果你在数据库中采用了二进制字段存储图片文件
微软 Access 里这些字段叫作 OLE 字段,而Oracle和SQL Server把它们称作 BLOB (二进制大型对象) 字段
那么在报表上显示出来就非常之简单
因为之前我没有做过类似的显示图片文件的报表,等我做出来之后,我自己都乐了
其实对这种二进制形式来说,跟普通的字段是一样的,拖到模板上就行了,呵呵
水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP

Setp2:下面我们来做一下加载磁盘上的图片的程序

其实有了上次《在水晶报表中实现任意选择指定字段显示》的实践,这次的思路就很明了了
就是先创建一个跟数据库版本一致的报表,当然是使用人见人爱的Ado.Net的方式
自己构造一个DataSet,把本地图片读成二进制流写进去
然后将这个DataSet推给报表就行了

水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP

我使用了水晶报表自己带的示例数据库里面的"雇员表"
水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP

看一下结构,主要是看一下各字段的格式,因为我们在创建DataSet的时候进行对应

特别注意下那个图片字段的格式,在VB.Net里我们可以用Byte来与之呼应

模板文件如下,没啥特别
水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP

代码如下,有详尽注释。

1水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'*************************************************************************
2水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**模 块 名:CR_DynLoadPics
3水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
4水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**创 建 人:Babyt(阿泰) http://www.cnblogs.com/babyt
5水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**日 期:2005-04-21
6水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**修 改 人:
7水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**日 期:
8水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**描 述:从本地磁盘获取图片文件进行显示
9水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' 本程序为原型程序,未进行完整保护
10水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**版 本:V1.0.0
11水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'*************************************************************************
12水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
13水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPImports System.Data
14水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'注意此处IO的加入是为了读取图片文件
15水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPImports System.IO
16水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPPublicClass Form1Class Form1
17水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPInherits System.Windows.Forms.Form
18水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
19水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPWindows 窗体设计器生成的代码#Region " Windows 窗体设计器生成的代码 "
20水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
21水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPPublic Sub New()SubNew()
22水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMyBase.New()
23水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
24水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'该调用是 Windows 窗体设计器所必需的。
25水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP InitializeComponent()
26水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
27水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'在 InitializeComponent() 调用之后添加任何初始化
28水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
29水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPEnd Sub

30水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
31水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'窗体重写 dispose 以清理组件列表。
32水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPProtected Overloads Overrides Sub Dispose()Sub Dispose(ByVal disposingAs Boolean)
33水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPIf disposing Then
34水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPIf Not (componentsIs Nothing)Then
35水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP components.Dispose()
36水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPEnd If
37水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPEnd If
38水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMyBase.Dispose(disposing)
39水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPEnd Sub

40水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
41水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'Windows 窗体设计器所必需的
42水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPPrivate components As System.ComponentModel.IContainer
43水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
44水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'注意: 以下过程是 Windows 窗体设计器所必需的
45水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'可以使用 Windows 窗体设计器修改此过程。
46水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'不要使用代码编辑器修改它。
47水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPFriend WithEvents Button1As System.Windows.Forms.Button
48水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPFriend WithEvents TextBox1As System.Windows.Forms.TextBox
49水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPFriend WithEvents CrystalReportViewer1As CrystalDecisions.Windows.Forms.CrystalReportViewer
50水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPFriend WithEvents Label1As System.Windows.Forms.Label
51水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP PrivateSub InitializeComponent()Sub InitializeComponent()
52水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Button1 = New System.Windows.Forms.Button
53水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.TextBox1 = New System.Windows.Forms.TextBox
54水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1 = New CrystalDecisions.Windows.Forms.CrystalReportViewer
55水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Label1 = New System.Windows.Forms.Label
56水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.SuspendLayout()
57水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
58水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'Button1
59水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
60水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Button1.Location = New System.Drawing.Point(520, 40)
61水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Button1.Name = "Button1"
62水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Button1.TabIndex = 0
63水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Button1.Text = "生成报表"
64水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
65水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'TextBox1
66水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
67水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.TextBox1.Location = New System.Drawing.Point(40, 40)
68水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.TextBox1.Name = "TextBox1"
69水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.TextBox1.Size = New System.Drawing.Size(392, 21)
70水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.TextBox1.TabIndex = 1
71水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.TextBox1.Text = "E:\myNet\CR_DynLoadPics\Pics"
72水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
73水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'CrystalReportViewer1
74水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
75水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.ActiveViewIndex = -1
76水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.AutoScroll = True
77水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.DisplayBackgroundEdge =False
78水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.DisplayGroupTree =False
79水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.Location = New System.Drawing.Point(24, 80)
80水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.Name = "CrystalReportViewer1"
81水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.ReportSource = Nothing
82水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.Size = New System.Drawing.Size(616, 320)
83水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.CrystalReportViewer1.TabIndex = 2
84水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
85水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'Label1
86水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
87水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Label1.Location = New System.Drawing.Point(40, 8)
88水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Label1.Name = "Label1"
89水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Label1.Size = New System.Drawing.Size(432, 23)
90水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Label1.TabIndex = 3
91水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Label1.Text = "请正确输入图片文件所在的目录,最后面不要带\,此处未进行校验!"
92水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
93水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'Form1
94水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'
95水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
96水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.ClientSize = New System.Drawing.Size(664, 429)
97水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Controls.Add(Me.Label1)
98水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Controls.Add(Me.CrystalReportViewer1)
99水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Controls.Add(Me.TextBox1)
100水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Controls.Add(Me.Button1)
101水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Name = "Form1"
102水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.Text = "Form1"
103水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPMe.ResumeLayout(False)
104水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
105水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPEnd Sub

106水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
107水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP#End Region

108水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
109水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPPrivate Sub Button1_Click()Sub Button1_Click(ByVal senderAs System.Object,ByVal e As System.EventArgs) Handles Button1.Click
110水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'查看CrystalReport1的定义可以查看对应的报表类
111水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPDim crReportDocument As New CrystalReport1
112水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPDim myDataSet As New DataSet
113水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPDim PicPath As String
114水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPDim myColume As System.Data.DataColumn
115水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPDim myRow As DataRow
116水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
117水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'---------------------------------------------------------------------
118水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'构造一个表,对应xsd文件
119水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP myDataSet.Tables.Add("雇员")
120水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'构造表结构,可以只构造部分字段
121水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP myDataSet.Tables(0).Columns.Add("姓", System.Type.GetType("System.String"))
122水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP myDataSet.Tables(0).Columns.Add("名", System.Type.GetType("System.String"))
123水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP myDataSet.Tables(0).Columns.Add("雇员照片", System.Type.GetType("System.Byte[]"))
124水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
125水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'---------------------------------------------------------------------
126水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'写入数据
127水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'注意此处没有进行校验
128水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP PicPath = TextBox1.Text & "\"
129水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'写数据行(分别用了3种图片格式)
130水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'提示:
131水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' 在这里你就可以使用你的数据库中保存的文件路径了
132水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' 用你的DataSet来填充这个将推给报表的DataSet
133水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' 如:
134水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP AddOneRow(myDataSet.Tables(0), "Babyt", "JPG文件", PicPath & "BBT_042105_04.jpg")
135水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP AddOneRow(myDataSet.Tables(0), "FaceSun", "Gif文件", PicPath & "Image49.gif")
136水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP AddOneRow(myDataSet.Tables(0), "张", "Gif文件", PicPath & "Image5.gif")
137水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP AddOneRow(myDataSet.Tables(0), "王", "JPG文件", PicPath & "1.jpg")
138水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP AddOneRow(myDataSet.Tables(0), "燕子", "JPG文件", PicPath & "2.jpg")
139水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP AddOneRow(myDataSet.Tables(0), "Cnblogs.com/babyt", "BMP文件", PicPath & "Coup30.bmp")
140水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
141水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'将这个DataSet推给报表
142水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP crReportDocument.SetDataSource(myDataSet)
143水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
144水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP''将报表传递给浏览器
145水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP CrystalReportViewer1.ReportSource = crReportDocument
146水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPEnd Sub

147水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'*************************************************************************
148水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**函 数 名:AddOneRow
149水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**输 入:
150水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' ByRef tbl As DataTable 要操作的表,注意是Byref
151水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' ByVal c1 As String 第一个字段的值
152水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' ByVal c1 As String 第二个字段的值
153水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' ByVal c1 As String 第三个字段的值,注意传入的是完整的图片文件名
154水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**输 出:无
155水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**功能描述: 在DataTable中增加一个数据行
156水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP' 该过程的主要是封装根据文件名提取本地文件写入到DataSet中
157水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**全局变量:
158水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**调用模块:
159水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**作 者:Babyt(阿泰)
160水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**日 期:2005-04-21
161水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**修 改 人:
162水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**日 期:
163水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'**版 本:V2.0.0
164水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'*************************************************************************
165水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPPublic Sub AddOneRow()Sub AddOneRow(ByRef tblAs DataTable, ByVal c1 As String, ByVal c2 As String, ByVal c3 As String)
166水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPDim fs AsNew FileStream(c3, FileMode.Open) ' 获取文本流
167水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPDim br AsNew BinaryReader(fs) ' 创建Binary Reader
168水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHPDim row As DataRow
169水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP
170水晶报表中如何动态加载图片(图片文件版本及数据库版本)-LMLPHP'创建一个新行
171

09-13 22:16