本章將要結合之前EEP2010基礎設計(中)裏面的S004和C004這2個Project來實現CrystalReport裏的單據印表。下面將透過具體的例子來介紹下一單據的設計方法,由於Server端我們直接使用之前設計好的S004,所以不必重新設計,說明如下:
q Client端
Step1>在Solution1中,增加一個新Project(從範本CReport1),命名為【cBill】。可以從Solution‘Solution1’的EEPClient目錄上面按下滑鼠右鍵,然後選擇Add->「New Project..」,出現如圖的視窗選擇範本「CReport1」,『Location』程式路徑選擇【C:\ProgramFiles\ InfoLight\EEP2010\MyProject】(Server與Client的程式都放在同一個目錄之下)。
圖 6-4-1 新增Client端Project
Step2>用滑鼠雙按cBill下面的Form1.cs,打開Form1.cs[Design]。
圖 6-4-2打開Form1.cs[Design]
Step3>按一下infoDataSet1的『RemoteName』屬性右邊的。打ERemoteName視窗。然後在DataModule選擇『S004』,在DBCommand裏選擇『Master』(Master為Server端S004裏面的InfoCommand的名字),按一下【OK】按鈕。
圖 6-4-3選中設定
Step4>把Master的『Active』屬性設置成【True】。另一個『PacketRecords』的屬性則必須設為【-1】,代表全部一次下載,否則資料會只有PacketRecords這麼多。
圖 6-4-4設定Master屬性
Step5>接下來在Master(InfoDataSet)的圖示上按一下滑鼠右鍵,在出現的右鍵功能表中選取「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檔案
Step9>先在Form1上的屬性視窗裏找到,按下滑鼠左鍵,再找到Form1的Load事件,然後滑鼠在Form1的Load事件的格子裏連按兩下。
圖 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-11打開CrystalReport設計器
Step11>用滑鼠左鍵按一下CrystalReport設計器的「Field Explorer」,然後右鍵Database Fields打開Database Expert視窗。
圖 6-4-12打開Database Expert視窗
Step12>按一下Create New Connection前的“+”號展開檔案夾,然後再按一下ADO.NET前的“+”號,然後選擇Infolight/ EEP2010/EEPNetReport/下的S004_Master.xml檔案,按一下【開啟(O)】按鈕。最後在ADO.NET視窗中按一下【完成】按鈕。
圖 6-4-13 開啟S004_Master.xml檔案
Step13>在Available Data Source裏選中「NewDataSet」,此時會出現兩個Table,一個為Master另一個為Detail,因為S004_Master就是一個Master/Detail的多檔結構,然後按一下按鈕,把『Master』和『Detail』一起增加到Selected tables裏面最後按一下【確定】按鈕。
圖 6-4-14 添加Master/Detail
Step14>會出現Links選項頁,因為多表當中必須定義其間的關係,一般來說系統會幫你綁定Master/Detail的Link關係,如果萬一沒有Link上,請自行用「By Key」來Link其間的關係即可,最後按一下【確定】按鈕即可。
圖 6-4-15 綁定Master/Detail的Link關係
Step15>再來我們先設計報身,把Field Explorer中Detail下的PurchaseID、ProductID、UnitPrice、Quantity欄位拖入報表的Details區域中。
圖 6-4-16 Detail欄位拖入Details區域
Step16>再把Master下的SupplierID、EmployeeID、PurchaseDate、RequiredDate欄位拖入報表的PageHeader中。(代表每頁都要印)。
圖 6-4-17 Master欄位拖入PageHeader區域
Step17>然後在Crystal Reports的Toolbox中找到Text Object,接著向報表中的Page Header增加4個Text Object,雙按每個Text Object,分別輸入SupplierID:、EmployeeID:、PurchaseDate:、RequiredDate:,放在下圖所示的位置處。
圖 6-4-18 增加4個Text Object
再來設計Report Footer,就是報表的最後的表尾,與Page Footer不一樣,Page Footer是每頁的表尾,在Template的Page Footer 裏已有一個TextObject和一個BoxObject。
Step18>雙按TextObject,輸入“客戶簽收:”。然後把Master表中的「TotalAmount」欄位拖入Report Footer區域中,在“客戶簽收:”的上方然後再加一個Text Object,雙按TextObject,輸入“總計:”,代表要將最後的總計以Master的TotalAmount欄位來印出來。
圖 6-4-19 增加欄位
Step19>滑鼠在Field Explorer裏的Formula Fields按一下,再右鍵「New…」,打開Formula Name視窗增加一個公式欄位。
圖 6-4-20 打開Formula Name視窗
Step20>在「Name」裏輸入【TotalAmount】,然後按一下【Use Editor】按鈕,打開Formula Workshop – Formula Editor視窗。
圖 6-4-21打開Formula Workshop – Formula Editor視窗
Step21>在Formula 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>雙按Form1中InfoNavigator1上的按鈕,增加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) |