閱讀Stephens' C#教材第三十六章筆記 介紹如何增加資料庫程式一些功能,例如:搜尋、過濾及排序,方便在資料庫中尋找資料。
Chapter 36 Programming Databases, Part 2
前一章介紹一個簡單的程式,雖然無法作為商業應用,但是幾乎不需要寫甚麼程式就可以執行簡單的資料庫操作。
本章將介紹如何為前章程式增加一些功能,例如:搜尋、過濾及排序,方便在資料庫中尋找資料。
大型資料庫要尋找特定的資料並不是容易的事,透過BindingSource的Find方法,傳入資料欄位與資料值就可進行搜尋,得到第一筆匹配的資料。
,可參考微軟網頁。
例如下列的程式可以尋找資料來源裡面FirstName欄位裡,值為Kim的資料
int recordNumber = this.contactsBindingSource.Find("FirstName", "Kim");
下列的程式可以將目標資料凸顯給使用者看,屬性說明可參考微軟網頁。
this.contactsBindingSource.CurrencyManager.Position = recordNumber;
但是當Find方法找不到符合的資料時會傳回-1,要注意別因這個例外讓程式當掉。
Find方法只會回傳完全匹配的值,若想彈性些將相關資料也回傳,例如年紀符合某些狀況(Age >= 21),資料含有特定字元(LastName開頭有S),或符合組合條件(居住地在"台北市"或"新北市"),就要使用BindingSource的Filter屬性,可參考微軟網頁。
在Filter屬性中傳入一個字串,描述所要過濾的條件,即會在資料來源進行過濾,只顯示符合條件的資料。
字串中可以使用的操作元為:=, <>, >, <, <=, >=, Like, in
舉例說明:
- LastName = 'Johnson' 。(找出LastName中值為Johnson的紀錄)
- FirstName = 'Ann' or FirstName = 'Anne' 。(找出FirstName中值為Ann或Anne的紀錄)
- FirstName LIKE 'Pam%' 。(找出FirstName中值開頭為Pam的紀錄)
- State IN ('NY', 'NC', 'NJ') 。(找出State中值為NY或NC或NJ的紀錄)
- (Balance < -50) or ((Balance < 50) AND (DaysOverdue > 30)) 。(找出Balance值比-50少,或Balance值比0少並且DaysOverdue大於30的紀錄)
BindingSource提供一個RemoveFilter方法可移除過濾,重新顯示資料來源中全部資料。
如果使用DataGridView作為資料顯示,你會發現點選欄位上方會發現資料重新排列,並以該欄位為排序依據,再點一次會反向排序一次。
使用BindingSource的Sort屬性可以指定欄位進行排序依據,同樣也有RemoveSort方法可移除排序,回到原來的資料順序。
ContactsFields程式示範Sort屬性的效果。
ContactsGrid程式示範Find方法與Filter屬性的效果。
TRY IT中示範上面的ContactsGrid程式如何一步一步建立出來。

