以下先以最簡單的單檔資料報表來初步瞭解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) |