[VS2010 Online]QueryExtender Control in Visual Studio 2010
今天我們來看在 Visual Studio 2010 中 ASP.NET 的新控制項 - QueryExtender。
在第一次看到 QueryExtender 時,我對它一無所知,看起來,它就是一個控制項,但是
無論我怎麼拖拉它就是不肯出現在畫面上。 很明顯的,這要看一下 MSDN 的說明。
原來這個控制項是跟 LinqDataSource 以及 EntityDataSource 一夥的。 很奇怪的,
我心中暗自覺得它們應該要打包在一起才對。(大概是為了向前相容性問題)
來看看怎麼使用:
1.
打開 Visual Studio 2010,開啟一個新的 ASP.NET 專案,新增一個 dbml 的檔案:
(這邊我以 Northwind 資料庫的 Employee 資料表為例)
2.
設定 LinqDataSource 資料來源:
依照原先預設的設定,然後按下結束‧
3.
GridView 套用來源後,做一些欄位調整:
我們先來看看 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。
看一下執行成果:
背後的 SQL 是怎麼運作的? (透過 SQL Profiler 來錄語法)
這是透過 LinqDaatSource 發出的 SQL 語法:
這是透過 EntityDaatSource 發出的 SQL 語法:
因為 SQL Server 預設為不分大小寫(Case Insensitive),所以填入的字串是不會區分。
如果要在 SQL Server 區分大小寫,可以透過設定 Collation 做處理,如果是在 Oracle
或是 MySQL,則可以透過設定下列屬性來忽略大小寫的設定。
RangeExpression:
拖拉一個 QueryExtender 控制項到畫面上,然後做一些 RangeExpression 的設定:
MinType 跟 MaxType 有三種選項可以選:
看看三種的結果(這邊我們只變更 MinType 的值):
1.) Exclusive
SQL 語法:
2.) Exclusive
語法:
3.) None
語法:(因為設定成 None ,所以 MaxType 會去讀第一個參數值)。
PropertyExpression:
這個控制項可以用來篩選資料表內的欄位,像是布林值‧我們這邊做一些調整,用 Pubs 資料庫的 authors 資料表作範例來源:
判斷條件來源為 CheckBox1 控制項,篩選欄位為 contract 。
語法:
OrderByExpression:
這個控制項是拿來排序的,看名字就很容易明瞭。
語法:(這邊可以看到多加了 ThenBy 之後,就會多排序設定)。
CustomExpression:
這個控制項可以讓我們自訂篩選規則,例如使用 RangeExpression 要去篩選 EmployeeID 大於
7以及小於3的集合,就沒有辦法達到,因此才有了這個自訂控制項:
自訂的 Linq 篩選語法。
DynamicFilterExpression:
用來處理 Dynamic Data 的篩選,可以篩選包含於另一個 Dyanamic 控制項的內容。
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發問喔。