天天看點

6-2 水晶報表技術(下)

水晶報表的執行模式分兩種模式:Pull 模式(拉模式)Push 模式(推模式)。

所謂Pull 模式是指被請求時,水晶報表直接根據指定的驅動連接配接資料庫然後組裝這些資料,當然這種方式不需要編寫任何代碼。

而Push 模式由開發者自己編寫代碼連接配接資料并組裝DataSet,同時将它傳送至報表。在些這種情況下,通過使用連接配接共享以及限制記錄集合的大小,可以最大化的使用報表的性能。當然這種方式需要開發者自行編寫大量的代碼,推動水晶報表産生使用者需要的資料。

水晶報表的類型主要包括兩種:Strongly-typed報表和Un-Typed 報表。所謂Strongly-typed報表是指當你将報表檔案加入到項目中去時,它就變成了一個了“strongly-typed”報表。在這些情況下,你将擁有直接建立報表對象的權力,這将減少一些代碼并且能夠提供一些性能。

而Un-Typed 報表是指該類型報表并不直接包含在項目中,是以稱為“un-typed”報表。在這種情況下,你不得不使用水晶報表的“ReportDocuemt”對象建立一個執行個體,并且需要通過程式動态凋用并操控報表中的具體對象。

本次實驗目标是通過水晶報表設計器,采用PULL模式的手段,實作對資料庫表資訊的報表顯示功能。

u 實驗步驟1:

右擊“解決方案浏覽器”,在彈出的菜單中選擇“添加”-> “添加新項”->“Crystal Report”基本界面如圖6-4所示。

圖6-4  建立水晶報表檔案

u實驗步驟2:

在“Crystal Report庫”中選擇“作為空白報表”單選按鈕,點選“确定”。基本界面如圖6-5所示。

圖6-5  建立空白水晶報表

u實驗步驟3:

這樣就會出現一個水晶報表設計器界面,該界面設計層次共分為五部分:報表頁眉區,頁眉區,詳細資料區,報表頁腳區,頁腳區。其分别的作用為:

Ø報表頁眉區:

主要用以顯示報表的首頁表頭資訊内容,如政府“紅頭檔案”的紅頭部分就是報表頁眉區。

Ø頁眉區:

每頁報表表頭資訊内容,如成績表格資訊内容的表格頭部資訊就是頁眉區。

Ø詳細資料區:

具體資料顯示區域,主要來自資料庫中表資訊的内容,也是決定報表内容多少的關鍵區域。

Ø報表頁腳區:

主要用以在報表的最後一頁尾部顯示資訊内容,如對于所有詳細資料區資料的統計工作常常在這個區域呈現。

Ø頁腳區:

每頁頁腳顯示的資訊,如“第××頁”就屬于頁腳區。

基本界面如圖6-6所示。

圖6-6  水晶報表設計界面的五個區域

u實驗步驟4:

右擊報表中的“詳細資料區”,選擇“資料庫”->“資料庫專家...“。在彈出的“資料庫專家”中,擴充“OLE DB(ADO)”選項,此時會彈出另外一個“OLE DB(ADO)”視窗。基本界面如圖6-7所示。

圖6-7  通過資料庫專家連接配接資料庫

u實驗步驟5:

在“OLE DB (ADO)”彈出視窗中,選擇“Microsoft OLE DB Provider for SQL Server”,然後點選“下一步”,基本界面如圖6-8所示。

圖6-8  選擇資料源類型

u實驗步驟6:

指定連接配接的資訊(如選擇Pubs資料庫),單擊“下一步”,最後單擊“完成”按鈕,基本界面如圖6-9所示。

圖6-9  選擇具體資料庫

u實驗步驟7:

這時你就能在“資料庫專家”視窗中看到我們選擇的資料庫。在可用資料源部分擴充“Pubs”資料庫,擴充“表”,選擇“employee”表并将其加到“標明的表”區中,單擊“确定”按鈕,完成對資料源的添加工作,基本界面如圖6-10所示。

圖6-10  添加具體資料庫中的表資訊

u實驗步驟8:

現在回到水晶報表設計器界面,在左側的“字段資源浏覽器”中展開“資料庫字段”,然後就會出現你剛才在資料庫專家内選擇的表以及表中的字段,基本界面如圖6-11所示。

圖6-11  字段管理器中的字段内容

u實驗步驟9:

拖放需要的字段進入報表的“詳細資料”區,字段名将會自動出現在”頁眉“區。如果你想修改頭部文字,則可以右擊“頁眉”區中的文字,選擇”編輯文本對象“選項并進行編輯。儲存并浏覽資訊,基本界面如圖6-12所示。

圖6-12  水晶報表設計器設計和浏覽界面

u實驗步驟10:

回到前面的WebForm中,拖放一個CrystalReport Viewer控件到頁面中去,基本界面如圖6-13所示。

圖6-13  拖放一個CrystalReport Viewer控件到頁面中

u實驗步驟11:

調出目前Crystal Report Viewer控件的屬性視窗,選擇“ReportSource”區點選下拉清單,選擇剛才建立的CrystalReport1報表檔案(如圖6-14所示)。則從資料庫中拾取的資料将在水晶報表内出現,PULL模式的實驗步驟結束。

圖6-14  配置CrystalReport Viewer控件的水晶報表源

本次實驗目标是通過水晶報表設計器,采用Push模式的手段,實作對資料庫表資訊的報表顯示功能。

u實驗步驟1:

右擊“解決方案浏覽器”,選擇“添加”--“添加新項”-->“資料集”。如圖6-15所示。

圖6-15  建立資料集對象

從“伺服器資料總管”中的“SQL Server”中拖放“Stores”表(位于PUBS資料庫中)。此時在資料集中就會有一個Stores表的結構圖。如圖6-16所示。

圖6-16  添加資料源連接配接選擇資料庫

建立一個新的.rpt檔案,指定為空報表。如圖6-17所示。

圖6-17  建立空報表

在建立的水晶報表設計界面,點選滑鼠右鍵,選擇“資料庫”->“資料庫專家...“。在彈出的“資料庫專家”中,擴充“項目資料”,選擇ADO.NET資料集,選擇上一步添加的資料表,并移到標明的表區域。

這樣就會在水晶報表設計界面的字段資料總管中出現該資料集表,選擇适當的字段拖到水晶報表詳細資料區域。如圖6-18所示。

圖6-18  配置資料源對象并拖拽相關字段到報表詳細資料區域

建立WinForm窗體,拖放一個CrystalReport Viewer控件到頁面中去,調出目前Crystal Report Viewer控件的屬性視窗,選擇“ReportSource”區點選下拉清單,選擇剛才建立的CrystalReport2報表檔案(如圖6-19所示)。

圖6-19  配置CrystalReport Viewer控件的資料源對象

運作後我們将看見一張空的報表,主要原因是DataSet對象所複制的僅僅是空的實體表的模式結構,而實質的資料必須通過程式設計的方式才可以實作。(如圖6-20所示)。

圖6-20  資料源對象為資料集類型在直接運作後将顯示空報表

用滑鼠目前的WinForm界面,進入窗體的Load事件編碼,并鍵入如下代碼:

        private void Form2_Load(object sender, EventArgs e)

        {

            string connstring = "Server=(local);DataBase=pubs;UID=sa;PWD=";

            //連接配接資料庫

            CrystalReport2 oCR = new CrystalReport2();//建立水晶報表對象oCR

            SqlConnection MyConn = new SqlConnection(connstring);

            MyConn.Open();//打開資料庫連接配接

            string strSel = "Select * from employee";//建立查詢字元串

            SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel, MyConn);

            MyAdapter.Fill(dataSet11, "employee");//建立DataSet資料集對象,并将查詢到的資料填充之

            oCR.SetDataSource(dataSet11);

            //指定目前水晶報表對象的資料源為剛才建立的DataSet資料集對象

            this.crystalReportViewer1.ReportSource = oCR;

            //指定水晶報表視圖控件的報表檔案為剛才設定的oCR報表檔案

 }

運作後,則報表資料将正常顯示出來。從這個實驗我們不難看出,Push模式必須通過對資料集對象的再次程式設計并加載資料後,才可以起到資料填充的實際效果,否則資料庫資訊将無法被顯示出來。

n水晶報表是用于建立報表的标準工具

n水晶報表的優點包括:

Ø運作時自定義

Ø報表檢視器與其他控件之間的互動

Ø報表可以作為 Web 服務

n開發 Windows 應用程式時,可以使用CrystalReportViewer控件将報表綁定到 Winform窗體上

nADO.NET 資料集設計器用于建立隻包含資料結構而不包含實際資料的資料集對象

n水晶報表中的選擇公式可用于計算字段和彙總,确定如何顯示報表的輸出結果

課 後 練 習

1、請你描述水晶報表的執行模式(Pull 模式和Push 模式)的差異?

2、根據你所遇到的資料庫,設計一個Pull 模式的水晶報表和一個Push 模式的水晶報表?

3、請你通路某部委網站,觀察其頒發的部委“紅頭檔案”,通過水晶報表設計并實作“紅頭檔案”的水晶報表刊發系統。

(1)設計出“紅頭檔案”頁眉部分

(2)設計出“紅頭檔案”正文部分

(3)設計出“紅頭檔案”頁腳部分

本文轉自 qianshao 51CTO部落格,原文連結:http://blog.51cto.com/qianshao/231838,如需轉載請自行聯系原作者