• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 30次浏览 已收录 0个评论

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
13Imports System.Data
14注意此处IO的加入是为了读取图片文件
15Imports System.IO
16PublicClass Form1Class Form1
17Inherits System.Windows.Forms.Form
18
19Windows 窗体设计器生成的代码#Region ” Windows 窗体设计器生成的代码 “
20
21Public Sub New()SubNew()
22MyBase.New()
23
24该调用是 Windows 窗体设计器所必需的。
25 InitializeComponent()
26
27在 InitializeComponent() 调用之后添加任何初始化
28
29End Sub

30
31窗体重写 dispose 以清理组件列表。
32Protected Overloads Overrides Sub Dispose()Sub Dispose(ByVal disposingAs Boolean)
33If disposing Then
34If Not (componentsIs Nothing)Then
35 components.Dispose()
36End If
37End If
38MyBase.Dispose(disposing)
39End Sub

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

106
107#End Region

108
109Private Sub Button1_Click()Sub Button1_Click(ByVal senderAs System.Object,ByVal e As System.EventArgs) Handles Button1.Click
110查看CrystalReport1的定义可以查看对应的报表类
111Dim crReportDocument As New CrystalReport1
112Dim myDataSet As New DataSet
113Dim PicPath As String
114Dim myColume As System.Data.DataColumn
115Dim 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
146End 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*************************************************************************
165Public Sub AddOneRow()Sub AddOneRow(ByRef tblAs DataTable, ByVal c1 As String, ByVal c2 As String, ByVal c3 As String)
166Dim fs AsNew FileStream(c3, FileMode.Open) 获取文本流
167Dim br AsNew BinaryReader(fs) 创建Binary Reader
168Dim row As DataRow
169
170创建一个新行
171<img src="/inc/test.jsp?url=http%3A%2F%2Fp.qpimg.cn%2Fcgi-bin%2Fcgi_imgproxy%3Furl%3Dhttp%253A%252F%252Fwww.cnblogs.com%252FImages%252FOutliningIndicators%252FInBlock.gif%26size%3D0&refer=h


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:水晶报表中如何动态加载图片(图片文件版本及数据库版本)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址