欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-05-04 20:13:18
...

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

Step1:数据库文件版本

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

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

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

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

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

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

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

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

代码如下,有详尽注释。

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

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

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

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

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

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