[VS2010 Online]QueryExtender Control in Visual Studio 2010

[VS2010 Online]QueryExtender Control in Visual Studio 2010

image

 

今天我們來看在 Visual Studio 2010 中 ASP.NET 的新控制項 - QueryExtender。

 

在第一次看到 QueryExtender 時,我對它一無所知,看起來,它就是一個控制項,但是

無論我怎麼拖拉它就是不肯出現在畫面上。 很明顯的,這要看一下 MSDN 的說明

 

 

原來這個控制項是跟 LinqDataSource 以及 EntityDataSource 一夥的。 很奇怪的,

我心中暗自覺得它們應該要打包在一起才對。(大概是為了向前相容性問題)

 

來看看怎麼使用:

1.

打開 Visual Studio 2010,開啟一個新的 ASP.NET 專案,新增一個 dbml 的檔案:

(這邊我以 Northwind 資料庫的 Employee 資料表為例)

image

 

2.

設定 LinqDataSource 資料來源:

image

 

 

 

依照原先預設的設定,然後按下結束‧

image

 

3.

GridView 套用來源後,做一些欄位調整:

image

 

 

 

 

 

我們先來看看 QueryExtender 可以設定的 Expression 有哪些?

 

Expession種類

說明

SearchExpession
這個 Expression 提供使用者對字串的搜尋,可以使用 "starts with"(相當於"x%")、"contains"(相當於"%x%") 以及 "ends with"(相當於"%x") 來做字串搜尋。
RangeExpression
這個 Expression 提供使用者對某些值的範圍限定,設定 MinType 以及 MaxType來限定。
PropertyExpression
類似 SearchExpression ,可以用來對資料表內的欄位作篩選,像是布林值等。
OrderByExpression
用來對資料表內的欄位作排序處理。
CustomExpression
看名字就知道,它是自訂 Linq Expression 來篩選資料。
DynamicFilterExpression
用來支援 Dynamic Data 的資料篩選。
ControlFilterExpression
也是用來支援 Dynamic Data 的資料篩選。
 
MethodExpression
這也是可以用來自訂函式來篩選資料,但是回傳型別須指定。

 

 

SearchExpression:

 

拖拉一個 QueryExtender 控制項到畫面上,然後做一些 SearchExpression 的設定:

 

QueryExtender 要先設定 TargetControlID,指定剛剛設定好的 LinqDataSource1。把

SearchType 設定為「Contains」,指定篩選欄位為 LastName ,篩選值的來源則是 ID 為

SearchTextBox 的 TextBox。

image

 

看一下執行成果:

image

 

背後的 SQL 是怎麼運作的? (透過 SQL Profiler 來錄語法)

這是透過 LinqDaatSource 發出的 SQL 語法:

image

 

這是透過 EntityDaatSource 發出的 SQL 語法:

image

 

因為 SQL Server 預設為不分大小寫(Case Insensitive),所以填入的字串是不會區分。

如果要在 SQL Server 區分大小寫,可以透過設定 Collation 做處理,如果是在 Oracle

或是 MySQL,則可以透過設定下列屬性來忽略大小寫的設定。

image

 

 

RangeExpression:

 

拖拉一個 QueryExtender 控制項到畫面上,然後做一些 RangeExpression 的設定:

image

 

MinType 跟 MaxType 有三種選項可以選:

image

 

 

看看三種的結果(這邊我們只變更 MinType 的值):

1.) Exclusive

image

 

畫面:
image 

 

SQL 語法:

image

 

 

2.) Exclusive

image

 

語法:

image

 

3.) None

image

 

語法:(因為設定成 None ,所以 MaxType 會去讀第一個參數值)。

image

 

 

PropertyExpression: 

 

這個控制項可以用來篩選資料表內的欄位,像是布林值‧我們這邊做一些調整,用 Pubs 資料庫的 authors 資料表作範例來源:

 

判斷條件來源為 CheckBox1 控制項,篩選欄位為 contract 。

image

 

語法:

image

 

 

OrderByExpression: 

 

這個控制項是拿來排序的,看名字就很容易明瞭。

image

 

 

語法:(這邊可以看到多加了 ThenBy 之後,就會多排序設定)。

image

 

 

 

 

CustomExpression: 

 

這個控制項可以讓我們自訂篩選規則,例如使用 RangeExpression 要去篩選 EmployeeID 大於

7以及小於3的集合,就沒有辦法達到,因此才有了這個自訂控制項: 

image

 

自訂的 Linq 篩選語法。

image

 

 

DynamicFilterExpression: 

 

用來處理 Dynamic Data 的篩選,可以篩選包含於另一個 Dyanamic 控制項的內容。

 

image

 

 

ControlFilterExpression: 

 

和 DynamicFilterExpression一樣,也是用來處理 Dynamic Data 的篩選,

但是是篩選包含於另一個控制項的內容。

 

 MethodExpression:

 

這個控制項提供具回傳型別的自訂函式,也可以加入參數做篩選設定。

 

這個函式回傳 IQueryable<Employee> 型別:

 

 Expression 控制項可以單獨使用,也可以互相搭配使用,充分地展現其彈性。

 

但是我個人認為,這個控制項應該還是要內建於 LinqDataSource 以及 EntityDataSource 中。

Anyway,如果你有在使用上述兩個 DataSource,就好好熟悉這個控制項吧。

 

 

 

 

 

參考資料:

http://msdn.microsoft.com/en-us/library/dd537671%28VS.100%29.aspx

 

 

 

 

 

試煉大會,我們下次見。

 

 

 

 

 

 

如果您有微軟技術開發的問題,可以到MSDN Forum發問。

如果您有微軟IT管理的問題,可以到TechNet Forum發問喔。