本章將要結合之前EEP2010基礎計(中)裏面的S004C0042Project來實現CrystalReport裏的單據印表。下面將透過具體的例子來介紹下一單據的設計方法,由於Server端我們直接使用之前設計好S004所以不必重新設計,說明如下:

 

q  Client

 

Step1Solution1中,增加一個新Project(從範本CReport1),命名為cBill。可以從Solution‘Solution1’EEPClient目錄上面按下滑鼠右鍵,然後選擇Add->New Project..,出現如圖的視窗選擇範本CReport1Location程式路徑選擇C:\ProgramFiles\ InfoLight\EEP2010\MyProjectServerClient的程式都放在同一個目錄之下)。

6-4-1 新增ClientProject

 

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

6-4-2打開Form1.cs[Design]

 

Step3按一下infoDataSet1RemoteName屬性右邊的ERemoteName視窗。然後在DataModule選擇S004,在DBCommand裏選擇MasterMasterServerS004裏面的InfoCommand的名字),按一下OK按鈕。

6-4-3選中設定

 

Step4MasterActive屬性設置成True。另一個PacketRecords的屬性則必須設為-1,代表全部一次下載,否則資料會只有PacketRecords這麼多。

6-4-4設定Master屬性

 

Step5接下來在MasterInfoDataSet)的圖示上按一下滑鼠右鍵,在出現的右鍵功能表中選取Save To Report,產生S004_Master.xml檔案注意在此的S004_Master是一個Master/Detail的多檔結構資料表

6-4-5 執行Save To Report

 

Step6回到主設計畫面中,為了可以省略畫面上「Print」的Button,可以將此整個Panel隱藏即可,點選到這個Panel1後,在點擊鍵盤上的Delete按鈕,刪除該panel。同時,選中CrystalReportViewer1右上角的,打開選擇Dock in Parent Container

6-4-6 隱藏Panel元件

Step7再來將用滑鼠左鍵按一下CrystalReportViewer1右上角的,打開功能選單,在裏面選擇Choose a Crystal Report…,打開Choose a Crystal Report視窗。

6-4-7打開Choose a Crystal Report視窗

 

Step8選擇EEP2010安裝目錄下EEPNetReport目錄裏面的RBill.rpt檔案,然後把Add to project前面的也打上,最後按 OK按鈕結束。

6-4-8 選擇RBill.rpt檔案

Step9Form1上的屬性視窗裏找到按下滑鼠左鍵,再找到Form1Load事件,然後滑鼠在Form1Load事件的格子裏連按兩下

6-4-9 進入Load事件

 

Œ    在程式視窗中Form1_Load事件裏輸入以下程式:

            Master.SetWhere(Wstr);

            RBill1.SetDataSource(Master.RealDataSet);

            crystalReportViewer1.ReportSource =RBill1;

 

    Form1_Load事件的前面輸入下面這行程式:

      public string Wstr; //Wstr設定為Public是為了能在別的程式中設值.

 

Ž    button1_Click事件中原有的2行程式注釋掉,代表打開此報表前必須對此Form設定Wstr的條件,然後一打開即可立即印表,不必再讓User選擇條件。完成之後如下圖所示:

6-4-10 編輯Load事件

 

Step10雙按RBill.rpt,打CrystalReport設計器。

6-4-11CrystalReport設計器

 

Step11滑鼠左鍵按一下CrystalReport設計器的「Field Explorer」,然後右鍵Database Fields打開Database Expert視窗。

6-4-12Database Expert視窗

 

Step12按一下Create New Connection前的“+”號展開檔案夾,然後再按一下ADO.NET前的“+”號,然後選擇Infolight/ EEP2010/EEPNetReport/下的S004_Master.xml檔案,按一下開啟(O)按鈕。最後在ADO.NET視窗中按一下完成按鈕。

6-4-13 開啟S004_Master.xml檔案

Step13Available Data Source裏選中NewDataSet,此時會出現兩個Table,一個為Master另一個為Detail,因為S004_Master就是一個Master/Detail的多檔結構,然後按一下按鈕,把MasterDetail一起增加到Selected tables裏面最後按一下確定按鈕。

6-4-14 添加Master/Detail

 

Step14會出現Links選項頁,因為多表當中必須定義其間的關係,一般來說系統會幫你綁定Master/DetailLink關係,如果萬一沒有Link上,請自行用By KeyLink其間的關係即可,最後按一下確定按鈕即可。

6-4-15 綁定Master/DetailLink關係

 

Step15再來我們先設計報身,把Field ExplorerDetail下的PurchaseIDProductIDUnitPriceQuantity欄位拖入報表的Details區域中。

6-4-16 Detail欄位拖入Details區域

 

Step16再把Master下的SupplierIDEmployeeIDPurchaseDateRequiredDate欄位拖入報表的PageHeader中。代表每頁都要印

6-4-17 Master欄位拖入PageHeader區域


Step17然後在Crystal ReportsToolbox中找到Text Object,接著向報表中的Page Header增加4Text Object,雙按每個Text Object,分別輸入SupplierID:、EmployeeID:、PurchaseDate:、RequiredDate:,放在下圖所示的位置處。

6-4-18 增加4Text Object

 

再來設計Report Footer,就是報表的最後的表尾,與Page Footer不一樣,Page Footer是每頁的表尾,在TemplatePage Footer 裏已有一個TextObject和一個BoxObject

Step18雙按TextObject,輸客戶簽收:。然後把Master表中的TotalAmount欄位拖入Report Footer區域中,在“客戶簽收:”的上方然後再加一Text Object,雙按TextObject,輸入總計:代表要將最後的總計以MasterTotalAmount欄位來印出來。

6-4-19 增加欄位

 

Step19滑鼠在Field Explorer裏的Formula Fields按一下,再右鍵New…,打開Formula Name視窗增加一個公式欄位

6-4-20 打開Formula Name視窗

 

Step20Name裏輸入TotalAmount,然後按一下Use Editor按鈕,打開Formula Workshop – Formula Editor視窗。


6-4-21打開Formula Workshop – Formula Editor視窗

 

Step21Formula Workshop – Formula Editor視窗的中,輸入{Detail.UnitPrice}*{Detail.Quantity}。這2個欄位也可以從「New DataSet」中拖入到編輯器裏。最後按下左上角的Save and close按鈕儲存。

6-4-22拖入編輯器

 

Step22最後把新建的公式欄位拖入到報表的Details域中。

6-4-23 公式欄位拖入Details

 

Step23雙按Report Header中的報表表頭這個TextObject,把報表表頭改成採購單。整張報表的設計如下圖所示:

6-4-24 更改報表表頭

 

Step24再右鍵cBill,按一下Build編譯cBill,產生cBill.dll 報表的功能就告一個段落。

 

再來就是要與原來的C004表單整合,也就是要在C004的採購管理中,將Navigator的「印表」連結到cBill這張報表中。

 

Step25我們打開C004表單,按右鍵的References,選擇Add Referance…,打開AddReferance視窗,用來設定C004引用了cBill這個dll模組。

6-4-25打開AddReferance視窗

 

Step26選擇EEP安裝目錄InfoLight\EEP2010\EEPNetClient\ Solution1\下面的cBill.dll,最後按下OK按鈕增加一個參考。來讓C004可以引用到cBill這個報表。

6-4-26增加cBill.dll參考

Step27滑鼠雙C004下面的Form1.cs,打開Form1.cs[Design]

6-4-27打開Form1.cs[Design]

 

Step28雙按Form1InfoNavigator1上的按鈕,增加Navigator事件。在bindingNavigatorPrintItem_Click事件裏輸入如下程式:

     cBill.Form1 temp=new cBill.Form1();
temp.Wstr = "PurchaseID='" +
PurchaseIDInfoTextBox.Text + "'"; // Key值傳入Wstr變數中

     temp.MdiParent = this.MdiParent;  // 設定MDI Parent為同一個MainForm

temp.WindowState = FormWindowState.Maximized;
     temp.Show(); // 顯出出來

完成圖如下:

6-4-28增加Navigator事件

Step29右鍵C004,按一下Build編譯C004,產生C004.dll

 

因為C004已經事先在 EEPMANAGER.exe定義好,所以可以不必再對C004設定安全管制,也因為cBill是在C004之下打開的表單,所以也不必對Cbill設定安全管制,有權限使用C004就代表有權限使用Cbill,如何還要分別出來其印表權利,則可以在C004中貼入Security元件,並以ibsMaster來設定其”Print”的印表權利,請參考進階有關Security元件的說明文件。

 

Step30執行EEPNetClient.exe,雙按C004功能表,選擇一張有Detail資料的訂單,然後按下按鈕,最後在打開的新視窗即可查看此張單據執行結果。至此,一個單據的設計就完成了。操作結果如下面兩張圖:

6-4-29單據的設計完成

 

 

 


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