以下先以最簡單的單檔資料報表來初步瞭解Crystal Report如何設計。

 

q  導出報表Template

設計報表之前,首先將我們設計好的Template導出來,在Windows的Report Template中我們有兩個,一個是一般的ReportView所做成,另一個為ClientQuery所做成,你們可以依照個人的經驗自行增加Template,報表Template在EEPNetClient下的Template檔案夾下面有CReport1和CReport2這2個Project。以下為導出Template的動作:

Step1>選擇功能表File->「Export Temlate…」,打開Export Template Wizard視窗,選擇所需導出的範本,如圖,我們選擇導出【Template\CReport1】,然後按下【Next】按鈕。

圖 6-1-1選擇所需導出的範本

 

Step2>如圖,命名為【CReport1】,最後再按下【Finsh】按鈕即可。


圖 6-1-2新範本命名

 

Step3>重複上面步驟,我們再將Template\CReport2導出,並命名為CReport2。

 

下文中,我們將會以這兩個Template來開發報表的範例。

 

q  Server端開發

 

Step1>在Solution1中,增加一個新Project(從範本SSingle),命名為【sReport1】。可以從Solution ‘Solution1’的EEPServer目錄上面按下滑鼠右鍵,然後選擇Add->「New Project..」,出現如下圖的視窗,選擇範本【SSingle】,『Location』程式路徑選擇【C:\Program Files\InfoLight\EEP2010\ MyProject】即可。

圖 6-1-2新增Server端Project


Step1>在Solution Explorer視窗裏,用滑鼠雙按sReport1下面的【Component.cs】,打開Component.cs[Design]。


圖 6-1-3打開Component.cs[Design]

 

Step2>先把InfoConnection的『ConnectionString』屬性設置成【ERPS】,然後滑鼠雙按Master(Master是InfoCommand的Name,用戶可以自行修改其Name);或是按下CommandText屬性右邊的,就會打開CommandText Editor視窗。接著按一下Tables下面的【Add】按鈕,在Choose tables裏選擇『Customers』表,按一下【OK】按鈕。


圖 6-1-4選定Customers資料表

 

Step3>接著在Tables裏選中『Customers』表,然後按一下【Add *】按鈕,最後按下【OK】按鈕。

圖 6-1-5設定Command語法

 

Step4>在Solution Explorer視窗裏sReport1的上面按滑鼠右鍵,按一下【Build】,編譯SReport1,產生sReport1.dll檔。執行桌面上的EEPNetServer.exe。

 

Step5>然後打開File->「Package Manager」,在Packages中選中『Solution1』,然後按一下【Add】,選擇\InfoLight\EEP2010\EEPNetServer\Solution1下面的『sReport1.dll』,按一下【開啟(O)】按鈕,最後按一下Package Manager中的【Save】按鈕。然後關閉Package Manager。

 

圖 6-1-6載入sReport1.dll

 

 

q  Client端開發

Step1>在Solution1中,增加一個新Project(從範本CReport1)。可以從Solution ‘Solution1’的EEPClient目錄上面按下滑鼠右鍵,然後選擇Add->「New Project...」,出現如圖的視窗,選擇範本『CReport1』,命名為【cSingleReport1】,『Location』程式路徑選擇【C:\Program Files\InfoLight\EEP2010\MyProject】即可。(Server與Client的程式都放在同一個目錄之下)。



圖 6-1-6新增Client端Project

 

Step2>用滑鼠雙按cSingleReport1下面的Form1.cs,打開Form1.cs[Design]。

圖 6-1-7開啟Form1.cs[Design]

 

Step3>按一下Master(Master為InfoDataSet資料表)的『RemoteName』屬性右邊的,打開RemoteName視窗。

圖 6-1-8開啟RemoteName視窗

 

Step4>然後在DataModule選中前面做好的『sReport1』,在DBCommand裏選擇『Master』(Master為Server端SReport1裏面的InfoCommand的名字),按一下【OK】按鈕。再把Master這個InfoDataSet的『Active』屬性設為【True】。

這個案例中我們是要直接將所有資料印出來,所以將『AlwaysClose』屬性設置成【False】,但大部份情況下是必須讓User先輸入條件後再印表的,因此大都是為True,另一個『PacketRecords』的屬性則必須設為【-1】,代表全部一次下載,否則資料會只有PackedRecords的設定值這麼多。

圖 6-1-9設置各屬性

 

Step5>在Master(InfoDataSe)處按下滑鼠右鍵,選取右鍵功能表的「Save To Report」,產生sReport1_Master.xml檔案在安裝目錄的EEPNetReport資料夾下(Master為Server端sReport1裏面的InfoCommand的名字)。

此目的是為了在RPT報表格式中(Crystal Report File),可以在設計模式中取得我們InfoDataSet的資料結構。


圖 6-1-10存檔

 

Step6>回到Form1設計畫面中,用滑鼠按一下「CrystalReport Viewer1」右上角的(快捷鈕),再按下「Create a New Crystal Report」,然後輸入報表名稱:CustomerReport,再按下【OK】。


圖 6-1-11新增一個Crystal Report

Step7>稍等2秒,會出現如下的畫面,選擇「From an Existing Report」,按下【OK】。

圖 6-1-12選擇「From an Existing Report」

 

Step8>選擇EEP2010安裝目錄下EEPNetReport目錄裏面的RSingle.rpt檔案,最後按下【開啟(O)】。

 
圖 6-1-13開啟RSingle.rpt檔案

Step9>滑鼠按兩下CustomerReport.rpt,打開CrystalReport設計器。

圖 6-1-14打開CrystalReport設計器

 

Step10>用滑鼠左鍵按一下CrystalReport設計器最右面的「Field Explorer」頁籤,然後在Database Fields上按滑鼠右鍵,在右鍵功能表中選擇「Database Expert…」按下滑鼠左鍵。(如果找不到Field Explorer,可以在Report的滑鼠右鍵功能表中找到。)


 
圖 6-1-15打開Database Expert視窗

 

Step11>按一下Create New Connection前的加號展開檔案夾,然後再按一下ADO.NET前的“+”號,會彈出ADO.NET視窗。然後選擇Infolight/EEP2008/EEPNetReport/下的sReport1_Master.xml檔案(這個檔案就是來自InfoDataSet的「Save To Report」功能所產生)。按一下【開啟(O)】。最後在ADO.NET視窗中按下【完成】。


圖 6-1-16開啟sReport1_Master.xml檔案

Step12>在Available Data Source格子裏選中『Master』,然後按一下按鈕,把Master增加到Selected tables格子裏面,按一下【確定】按鈕。

圖 6-1-17添加Master資料表

Step13>在Field Explorer先按一下Database Fields前的“+”號,再按一下Master前的“+”號。最後在展開的Master中選中所需的欄位按下滑鼠左鍵不放,把所需要的欄位元拖到CrystalReport設計器的Details(明細區域)中。


圖 6-1-18欄位元拖到Details中

Step14>滑鼠點兩下“報表表頭”這個TextObject,把『Text』改成【客戶資料表】。

 


圖 6-1-19更改報表表頭

Step15>回到Form1的設計畫面,滑鼠連按兩下【Print】按鍵,就會開啟button1_Click事件程式碼。

圖 6-1-20開啟button1_Click事件

在button1_Click事件中已經有以下兩行程式:

            string Wstr = "1=0";

            Master.SetWhere(Wstr);

其中string Wstr=”1=0”;這行程式本來用來自行設定資料表的條件所使用,注意如果有User條件輸入,就可以在這個程式中加入Wstr的Where語句,此時InfoDataSet的AlwaysClose屬性就必須設為True。現在因為我們沒有條件,要全部印出,因此將此兩行程式用「//」註釋掉。

F 然後我們要自己輸入以下兩行程式:

            CustomerReport1.SetDataSource(Master.RealDataSet);

            crystalReportViewer1.ReportSource = CustomerReport1;

F 完成之後就如同下圖:


圖 6-1-21啟動button1_Click事件

Step16>如果想要在按下「Print」按鈕之前,沒有Crystal Report 的空白表頭,就請回到Form1的設計畫面中,用滑鼠按一下「CrystalReportViewer1」右上角的,再按下「Clear Report Source」。

圖 6-1-22 Clear Report Source的設置

Step17>右鍵CSingleReport1按一下【Build】,編譯CSingle Report1,產生cSingleReport1.dll。然後執行桌面捷徑「EEPNetServer.exe」,接著執行桌面捷徑「EEPManager.exe」。

圖 6-1-23編譯CSingle Report1,執行EEPManager

 

Step18>選擇System->「Security Manager」,打開Security視窗。然後選中ROOT,按一下【Add】按鈕,增加一個功能表,按照下圖設置好Menu Information(其中Package是選擇EEP安裝目錄InfoLight\EEP2010\EEPNetClient\Solution1下的cSingleReport1.dll檔),最後按一下【OK】按鈕。

圖 6-1-24設置各Menu Information值

 

Step19>選中cSingleReport1,按一下【Access Groups】,在出現的frmSelGroups視窗中先選中『EveryOne』,然後按一下按鈕,接著按一下【OK】按鈕,最後關閉Security視窗。

圖 6-1-25添加EveryOne組

 

Step20>執行桌面捷徑「EEPNetClient.exe」,然後雙按cSingleReport1,按下「Print」按鈕查看執行結果。至此,一個簡單的報表設計就完成了。

圖 6-1-26報表完成

如果希望一打開就能有資料,不必再按「Print」才有資料時,只要將此Button的OnClick程式移到CSingleReport1表單的Load事件中即可,如下:

private void Form1_Load(object sender, EventArgs e)

{

   CustomerReport1.SetDataSource(Master.RealDataSet);

          crystalReportViewer1.ReportSource = CustomerReport1;

    }

 

 

 


Converted from CHM to HTML with chm2web Pro 2.85 (unicode)