1 . 環境 : XP SP3 + VS2005 + 內建 CrystalReports
2 . 需求 : 當程式在執行期間,報表以顯示預設的群組欄位分類顯示,而使用者希望能夠
自定要分類顯示的群組項目。
1 . 環境 : XP SP3 + VS2005 + 內建 CrystalReports
2 . 需求 : 當程式在執行期間,報表以顯示預設的群組欄位分類顯示,而使用者希望能夠
自定要分類顯示的群組項目。
3 . 範例資料 : VS2005 CrystalReports 內建的範例資料庫 xtreme.mdb,預設位置
C:\Program Files\Microsoft Visual Studio 8\Crystal Reports\Samples\zh-cht\Databases
範例資料表 : xtreme.mdb 內的 [客戶] 資料表。(參考圖一)
因其只是範例,故在報表內將主要抓取欄位 [國家],[城市],[地區]
做為範例顯示。
4 . 報表設計階段畫面 : 在報表設計階段畫面--> 欄位總管窗格 -->資料庫欄位 --> 右鍵 --> 資料庫專家
4-1 . 將資料庫 xtreme.mdb 內的 [客戶] 資料表載入至報表內。(參考圖二)
在資料庫專家左方 [可用的資料來源] --> 建立新連結 --> Access/Excel(DAO) --> 選取Acess 資料檔案 -->
4-2 . 將其內的客戶資料表加入右方 [選取的資料表]。(參考圖三)
(圖三)
4-3 . 規劃並設計報表畫面(參考圖四)
4-3.1 . 建立文字欄位並設定標題。
4-3.2 . 將要顯示的資料欄位拉到細項區塊。
(圖四)
4-3.3 設定預設的群組欄位 : 欄位總管窗格--> 右鍵 --> 插入群組 -->選取作為預設的群組欄位(參考圖五)
5 . UI畫面和程式碼
5-1 . UI畫面,主視窗 Form2 ,主要利用 ComBobox 選擇要做為群組分類的欄位 (參考圖六),而報表顯示在 Form1
5-2 . 程式碼
'加入 CrystalReports.Engine 參考
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.Collections
顯示報表
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
'建立報表的執行個體
Dim oRpt As CrystalReport1 = Form1.CrystalReport11
If ComboBox1.SelectedIndex > 0 Then '判斷所選取的群組項目
Dim FieldDef As FieldDefinition '宣告報表欄位定義
'設定 FileDef 所代表的在資料庫內的欄位
'抓取ComBobox1.Text 在符號 [ - ] 之後的字串
FieldDef = oRpt.Database.Tables.Item(0).Fields.Item(Strings.Split(ComboBox1.Text, "-")(1))
'設定報表群組的欄位定義
oRpt.DataDefinition.Groups.Item(0).ConditionField = FieldDef
End If
If Form1.Visible = True Then
'以顯示報表故只要重新整理
Form1.CrystalReportViewer1.RefreshReport()
Form1.Focus()
Form1.Select()
Else
'未顯示報表,重新載入報表
Form1.CrystalReportViewer1.ReportSource = oRpt
Form1.Show()
Form1.Select()
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
6 . 執行畫面(參考圖七,圖八)
7 . 以上請多參考
8 . 預告下一篇 將會介紹 [ 固定欄位數 ] ,執行期間~動態改變顯示在報表上的資料庫欄位,由使用者決定要顯示在報表上的資料庫欄位
[CrystalReports] 公式欄位~固定欄位數,執行期間~動態改變顯示資料庫欄位
====================================================
有些事就該把它當作一種回憶...