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。(代表可以保存上次查詢的條件)。

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

 

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

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

5-4-2 增加OrderID欄位

 

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

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

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

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

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

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

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

 

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

5-4-3 增加OrderDateFrom欄位

 

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

5-4-4 增加OrderDateTo欄位

 

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

5-4-5 增加CustomerID欄位

 

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

5-4-5 ClientQuery編輯對話窗

 

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

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

5-4-6 加入Click事件

 

加入以下的程式碼:

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

 

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

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

 

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

 

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


5-4-8 Query對話框

 

q   ClientQuery設計一個查詢功能

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

 

Step1Template中,新增了一個CQueryTemplate

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

5-4-9新增一個CQueryTemplate

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

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

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

 

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

5-4-11 新增C006項目

 

Step4打開C006專案的Form1.cs的設計畫面。在QueryInfoDataSet)上設定RemoteNameS002.view,然後設定ActiveTrue,再將AlwaysClose設為True

 

5-4-12 設定Query屬性

 

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

 

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

5-4-13 設定ibsQuery.DataMember

 

Step6ClientQuery這個元件上Double Click

Œ  Column分別設為CustomerID】、【EmployeeID】、【OrderDateOrderDate(重複兩個);

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

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

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

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

 

5-4-14 設定ClientQuery元件

 

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

設定 SelectAliasERPSSelectCommandSelect * From CustomersDisplayMemberCompany NameValueMemberCustomerID

5-4-15 設定InfoRefVal元件

Step8再將ClientQueryCustomerIDInfoRefVal屬性設為infoRefVal1

5-4-15 設定ClientQuery.CustomerID

 

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

5-4-16 執行查詢結果

 


 

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