Step1:數(shù)據(jù)庫文件版本 如果你在數(shù)據(jù)庫中采用了二進制字段存儲圖片文件 微軟 Access 里這些字段叫作 OLE 字段,而Oracle和SQL Server把它們稱作 BLOB (二進制大型對象) 字段 那么在報表上顯示出來就非常之簡單 因為之前我沒有做過類的顯示圖片文件的報表,等
Step1:數(shù)據(jù)庫文件版本
如果你在數(shù)據(jù)庫中采用了二進制字段存儲圖片文件
微軟 Access 里這些字段叫作 OLE 字段,而Oracle和SQL Server把它們稱作 BLOB (二進制大型對象) 字段
那么在報表上顯示出來就非常之簡單
因為之前我沒有做過類似的顯示圖片文件的報表,等我做出來之后,我自己都樂了
其實對這種二進制形式來說,跟普通的字段是一樣的,拖到模板上就行了,呵呵
Setp2:下面我們來做一下加載磁盤上的圖片的程序
其實有了上次《在水晶報表中實現(xiàn)任意選擇指定字段顯示》的實踐,這次的思路就很明了了
就是先創(chuàng)建一個跟數(shù)據(jù)庫版本一致的報表,當(dāng)然是使用人見人愛的Ado.Net的方式
自己構(gòu)造一個DataSet,把本地圖片讀成二進制流寫進去
然后將這個DataSet推給報表就行了
我使用了水晶報表自己帶的示例數(shù)據(jù)庫里面的"雇員表"
看一下結(jié)構(gòu),主要是看一下各字段的格式,因為我們在創(chuàng)建DataSet的時候進行對應(yīng)
特別注意下那個圖片字段的格式,在VB.Net里我們可以用Byte來與之呼應(yīng)
模板文件如下,沒啥特別
代碼如下,有詳盡注釋。
1'*************************************************************************
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
2'**模
塊 名:CR_DynLoadPics
3'
4'**創(chuàng)
建 人: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
16Public
Class Form1Class Form1
17
Inherits System.Windows.Forms.Form
18
19Windows
窗體設(shè)計器生成的代碼#Region " Windows 窗體設(shè)計器生成的代碼 "
20
21
Public
Sub New()Sub
New()
22
MyBase.New()
23
24
'該調(diào)用是 Windows 窗體設(shè)計器所必需的。
25
InitializeComponent()
26
27
'在 InitializeComponent() 調(diào)用之后添加任何初始化
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 窗體設(shè)計器所必需的
42
Private components
As System.ComponentModel.IContainer
43
44
'注意: 以下過程是 Windows 窗體設(shè)計器所必需的
45
'可以使用 Windows 窗體設(shè)計器修改此過程。
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
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的定義可以查看對應(yīng)的報表類
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
'構(gòu)造一個表,對應(yīng)xsd文件
119
myDataSet.Tables.Add("雇員")
120
'構(gòu)造表結(jié)構(gòu),可以只構(gòu)造部分字段
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
'寫入數(shù)據(jù)
127
'注意此處沒有進行校驗
128
PicPath = TextBox1.Text & "\"
129
'寫數(shù)據(jù)行(分別用了3種圖片格式)
130
'提示:
131
' 在這里你就可以使用你的數(shù)據(jù)庫中保存的文件路徑了
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
'**函 數(shù) 名: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中增加一個數(shù)據(jù)行
156
' 該過程的主要是封裝根據(jù)文件名提取本地文件寫入到DataSet中
157
'**全局變量:
158
'**調(diào)用模塊:
159
'**作 者:Babyt(阿泰)
160
'**日 期:2005-04-21
161
'**修 改 人:
162
'**日 期:
163