往下我們要配合使用ClientQuery來讓User輸入條件後,再輸出到報表中。Server端與之前的一樣,因此只在這裏介紹Client的設計步驟。
q Client端
Step1>在Solution1中,增加一個新Project(從範本CReport2),命名為【cSingleReport2】。可以從Solution‘Solution1’的EEPClient目錄上面按下滑鼠右鍵,然後選擇Add->「New Project…」出現如圖的視窗選擇範本「CReport2」,『Location』程式路徑選擇【C:\Program Files\InfoLight\EEP2010\MyProject】即可。(即Server與Client的程式都放在同一個目錄之下)。
圖 6-2-1新增Client端Project
Step2>用滑鼠雙按cSingleReport2下面的Form1.cs,打開Form1.cs [Design]。
圖 6-2-2打開Form1.cs [Design]
Step3>按一下Master(Master為InfoDataSet資料表)的RemoteName屬性右邊的。
圖 6-2-3打開RemoteName視窗
Step4>打開RemoteName視窗。然後在DataModule選中剛才『sReport1』,在DBCommand裏選擇『Master』(Master為Server端SReport1裏面的InfoCommand的名字),按一下【OK】按鈕。
圖 6-2-4選定值
Step5>把Master(InfoDataSet元件)的『Active』屬性和『AlwaysClose』屬性設置成【True】。此因本查詢表需要事先由User來輸入資料給ClientQuery來執行Where條件,因此打開Report的同時,將 『AlwaysClose』 設為【True】,代表不會啟動此InfoDataSet,另一個『PackedRecords』的屬性則必須設為【-1】,代表全部一次下載,否則資料會只有PackedRecords這麼多。
圖 6-2-5設定Master各屬性
Step6>在Master (InfoDataSe)按下滑鼠右鍵,選取右鍵功能表的「Save To Report」,產生sReport1_Master.xml檔案。(Master為Server端sReport1裏面的InfoCommand的名字)。
此目的是為了在RPT報表格式(Crystal Report
File)的設計模式中取得我們InfoDataSet的資料結構。
圖 6-2-6 執行Save To Report
Step7>回到主設計畫面中,把ibsMaster(此為InfoBindingSource資料表,Template已經讓其DataSource對應到Master這個DataSet了,而『DataMember』屬性設置為【Master】,就是指對應到Master這個Table上。
圖 6-2-7 設置DataMember屬性
Step8>用滑鼠左鍵按一下clientQuery1的Columns屬性右面的,打開QueryColumns Collection
Editor視窗。
圖 6-2-8 打開QueryColumns Collection Editor視窗
Step9>從ToolBox選「InfoRefVal」,到Form1的下方設定InfoRefVal1的屬性如下:
圖 6-2-9 設定InfoRefVal1的屬性
Step10>在QueryColumns Collection Editor視窗中按一下【Add】按鈕,增加2個Member(成員)。2個Member的具體設置如下圖所示,分別為『從客戶編號』與『到客戶編號』兩個欄位做為查詢條件等。設置完後按【OK】按鈕結束設置。
圖 6-2-10 增加2個Member
Step11>用滑鼠左鍵按一下CrystalReportViewer1右上角的,打開功能選單,在裏面選擇「Choose a Crystal Report…」,打開Choose a Crystal Report視窗。
圖 6-2-11 打開Choose a Crystal Report視窗
Step12>我們可以選擇上一個範例做好的CustomerReport.rpt檔案,選擇瀏覽,找到C:\ProgramFiles\InfoLight\EEP2010\MyProject
\cSingleReport1\CustomerReport.rpt這個檔案,然後把「Add to
project」前面的也打上(代表會自動加入到目前的Project中,最後按【OK】按鈕結束。
圖
6-2-12/1
選擇CustomerReport.rpt檔案
圖 6-2-12/2 將CustomerReport.rpt加入Project中
Step13>在「Query」的按鍵上連點兩下滑鼠左鍵,就會進入到button1_Click事件。
圖 6-2-13 進入button1_Click事件
F 在button1_Click事件中輸入以下三行程式:
clientQuery1.Execute(splitContainer1.Panel1);
CustomerReport1.SetDataSource(Master.RealDataSet);
crystalReportViewer1.ReportSource = CustomerReport1;
代表在此Button按下去時,會去執行ClientQuery的Execute()函數,來取得Panel1內的條件並組合SQL的Where語句給ClientQuery所指定的BindingSource,即可讓此BindingSource依User的條件來反應內容。最後再將Master這個InfoDataSet內的RealDataSet內容指定給CustomerReport1這個報表作為資料的源頭。如下圖:
圖 6-2-14 定義button1_Click事件
Step14>右鍵cSingleReport2,按一下【Build】,編譯CSingleReport2產生CSingleReport2.dll,然後執行「EEPNetServer.exe」,接著執行「EEPManager.exe」。
在EEPManager.exe的設定步驟,我們不再贅述與貼圖,簡單說明操作方式即可。
Step15>選擇System->「Security
Manager」,打開Security視窗。然後選中ROOT,按一下【Add】按鈕,增加一個功能表。Menu Information裏面MenuId會自動編號,將『Caption』設置為【CSingleReport2】,『Sequence』設置為【1】(其中Package是選擇EEP安裝目錄InfoLight\EEP2010\EEPNetClient\Solution1下的cSingleReport2.dll檔),最後按一下【OK】按鈕。
Step16>選中cSingleReport2,按一下【Access
Groups】,在出現frmSelGroups視窗中先選中『EveryOne』,然後按一下按鈕,接著按一下【OK】按鈕,最後關閉Security視窗。
Step17>執行程式「EEPNetClient.exe」,然後雙按“cSingleReport2”功能表,輸入查詢條件,最後按下「Query」按鈕查看執行結果。(按「Clear」按鈕可以清除查詢結果和輸入的查詢條件)。至此,一個使用ClinetQuery與簡單的報表結合設計就完成了。
圖 6-2-15 ClientQuery報表完成
Converted from CHM to HTML with chm2web Pro 2.85 (unicode) |