Step1:數據庫文件版本 如果你在數據庫中采用了二進制字段存儲圖片文件 微軟 Access 里這些字段叫作 OLE 字段,而Oracle和SQL Server把它們稱作 BLOB (二進制大型對象) 字段 那么在報表上顯示出來就非常之簡單 因為之前我沒有做過類的顯示圖片文件的報表,等
Step1:數據庫文件版本
如果你在數據庫中采用了二進制字段存儲圖片文件
微軟 Access 里這些字段叫作 OLE 字段,而Oracle和SQL Server把它們稱作 BLOB (二進制大型對象) 字段
那么在報表上顯示出來就非常之簡單
因為之前我沒有做過類似的顯示圖片文件的報表,等我做出來之后,我自己都樂了
其實對這種二進制形式來說,跟普通的字段是一樣的,拖到模板上就行了,呵呵
Setp2:下面我們來做一下加載磁盤上的圖片的程序
其實有了上次《在水晶報表中實現任意選擇指定字段顯示》的實踐,這次的思路就很明了了
就是先創建一個跟數據庫版本一致的報表,當然是使用人見人愛的Ado.Net的方式
自己構造一個DataSet,把本地圖片讀成二進制流寫進去
然后將這個DataSet推給報表就行了
我使用了水晶報表自己帶的示例數據庫里面的"雇員表"
看一下結構,主要是看一下各字段的格式,因為我們在創建DataSet的時候進行對應
特別注意下那個圖片字段的格式,在VB.Net里我們可以用Byte來與之呼應
模板文件如下,沒啥特別
代碼如下,有詳盡注釋。
1 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com'*************************************************************************
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
16Public
Class Form1Class Form1
17
Inherits System.Windows.Forms.Form
18
19Windows
窗體設計器生成的代碼#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
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