第6章EEP 2019基礎設計(下)第6章EEP 2019基礎設計(下)\6-4 ClientQuery設計

6-4 ClientQuery設計

EEP中除了使用InfoNavigator的查詢功能,還有一個ClientQuery元件可以做更深入的控制,例如可以做範圍式查詢,或想使用InfoRefValDateTimePicker等方式要來輸入查詢的條件等,將比InfoNavigatorQuery功能更靈活。ClientQuery有幾種用途:

1.     InfoNavigator增加功能,如果InfoNavigator無法滿足User的需求。

2.     為各式查詢系統或報表自動產生條件輸入的畫面,不必自行貼入各種TextBox元件,也不必自己依各個條件去組合要查詢的SQL Where的語法,ClientQuery將一次滿足需求。

 

 

q   取代InfoNavigator的查詢

 

以下我們就以ClientQuery來實現InfoNavigator查詢的功能,如下。

Step1打開C002From1設計畫面,從ToolBox中添加一個ClientQuery元件,設定其BindingSource屬性為ibsMasterCaption屬性為Orders QueryKeepCondition屬性則設為True。(代表可以保存上次查詢的條件)。

6-4-1設定ClientQuery元件屬性

 

Step2Columns屬性中,增加要查詢的欄位名稱。

Œ  增加OrderID查詢條件,請照圖設定:

6-4-2增加OrderID欄位

 

每個查詢條件需要設定的屬性包括:

F   Column代表要查詢的欄位名稱;

F   Caption代表查詢欄位的標題,會自動帶出資料字典;

F   ColumnType為條件輸入的元件類型,一般都是TextBox,也可以是RefVal或其他;

F   Operator為查詢運算元,代表查詢的模式(如等於大於小於等);ConditionANDOR條件;

F   NewLine代表是否換行,True時則會自動換行,False則會排在上一個右方;

F   最後InfoRefVal設定。(如果輸入控制項是ClientQueryRefValColumn,則要設定關聯的InfoRefVal)。

 

   增加OrderDateFrom查詢條件。請照圖設定:

6-4-3增加OrderDateFrom欄位

 

Ž   增加OrderDateTo查詢條件。請照圖設定:

6-4-4增加OrderDateTo欄位

 

   增加CustomerID查詢條件。請照圖設定:

6-4-5增加CustomerID欄位

 

ClientQueryColumns屬性還可以透過對ClientQuery元件以Double Click來設定。如下將出現一個編輯對話窗供開發者快速設定。設定過程中,如果按下Preview,還可以預覽此查詢介面的最新情況。

6-4-5 ClientQuery編輯對話窗

 

為了使用ClientQuery而不是InfoNavigator上的Query,可以在InfoNavigator上增加一個Button,或是直接在InfoNavigator上將Query的功能取代,這裏我們重新設定Query按鍵的功能如下:

Step3點選在這個BindNavigatorQueryItem上,點下並在Click事件上連點兩下。

6-4-6加入Click事件

 

加入以下的程式碼:

privatevoid bindingNavigatorQueryItem_Click(object sender, EventArgs e)
        {
clientQuery1.Execute();
        }

 

Step4把焦點放在InfoNavigator,按下,變回屬性視窗,設定ViewQueryItemnone

6-4-7設定InfoNavigator.ViewQueryItem屬性

 

因為InfoNavigator並不知道我們自己有設計Click事件,因此必須將InfoNavigatorViewQueryItem設為none,否則會重覆執行Query功能。

 

Step5重新Build項目C002。並在EEPNetClient中打開C002,按下InfoNavigator的「Query」按鈕,如圖:


6-4-8 Query對話框

 

q   ClientQuery設計一個查詢功能

很多查詢系統都是以SQL為目標,設計一個畫面讓User輸入條件後去組合Where的語法,然後再送往後端Database中取得資料,ClientQeury就是將這些常用的行為規格化,並以設定的方式來取代傳統的程式開發方式,增加程式人員的開發效率。以下我們就舉一個訂單的查詢系統來說明。

 

Step1Template中,新增了一個CQueryTemplate

注:如果還有沒輸出,則先以匯出範本Export Template的方式對其輸出到Template中。(請參考安裝設定的Export Template方法)

6-4-9新增一個CQueryTemplate

打開S002案的Component.cs設計畫面,原來的物件viewInfoCommand),就是用來單獨Select Orders這個表單,因此我們可以用其來做為查詢後端的SQL命令,與Client端的ClientQuery元件直接配合即可。

Step2如下圖在view的圖示上點兩下,就會打開Command Text Editor。然後可以檢查一下原先的設定。

6-4-10設定View元件Select語句

 

Step3新增一個C006項目(Project),這次我們選擇的Cquery這個Template來新增。

6-4-11新增C006項目

 

Step4打開C006專案的Form1.cs的設計畫面。在QueryInfoDataSet)上設定『RemoteName』為S002.view,然後設定『Active』為【True】,再將『AlwaysClose』設為【True】,

6-4-12設定Query屬性

 

代表打開表單時,此DataSet不會自動啟動(沒有資料會被下載),以節省不必要的資料存取;

 

Step5再將ibsQueryDataMember設為view,指向DataSetView這個Table,也就是Orders這個Table

6-4-13設定ibsQuery.DataMember

 

Step6ClientQuery這個元件上Double Click

Œ 將『Column』分別設為【CustomerID】、【EmployeeID】、【OrderDate】、【OrderDate】(重複兩個);

 将『Operator』分別設定為【=】、【=>=】、【<=分別代表可以輸入客戶編號員工編號從訂單日期到訂單日期

Ž  為了到訂單日期可以與從訂單日期同一行,可以將其『NewLine』設為【False】;

 為了讓客戶編號可以使用選單,在ClientQueryCustomerID中將ColumnType改為【ClientQueryRefValColumn】;

 為了讓訂單日期可以用選的,所以把OrderDateColumnType屬性改為【ClientQueryCalendarColumn

 

6-4-14設定ClientQuery元件

 

Step7為了讓客戶編號可以使用選單,因此我們在貼上一個InfoRefVal元件。

設定『SelectAlias』為ERPS】;SelectCommand』為【Select * From Customers】;『DisplayMember』為【CompanyName】;『ValueMember』為CustomerID

6-4-15設定InfoRefVal元件

Step8再將ClientQueryCustomerIDInfoRefVal屬性設為infoRefVal1

6-4-15設定ClientQuery.CustomerID

 

最後,將C006編譯,EEPManager.EXE中以Menu Utility來設C006的使用權,並到EEPNetClient.EXE打開C006,可以試著輸入條件,即可得到查詢的結果。

6-4-16執行查詢結果

 


 

Top of Page