摘要:ASP.NET 2.0 - 關於 CancelSelectOnNullParameter 屬性
在我們談 SqlDataSource 物件的 CancelSelectOnNullParameter 屬性之前,先來看看兩個網頁範例。
在資料的篩選手法上,我們經常會讓使用者從 DropDownList 控制項中選取某一個選項,然後將符合該選項的資料記錄顯示於 GridView 控制項中。圖表 1 與圖表 2 所示的網頁都是採用此種作法來設計的,然而這兩個網頁存在一個最大的差異。以圖表 1 所示的網頁而言,如果您從 DropDownList 控制項中選取「請選擇一個部門」選項(也就是沒有選擇特定的部門),則不會有任何資料顯示於 GridView 控制項中,事實上在這個時候,GridView 控制項根本不會顯示出來。以圖表 2 所示的網頁而言,如果您從 DropDownList 控制項中選取「請選擇一個部門」選項(也就是沒有選擇特定的部門),則所有部門的資料都會顯示於 GridView 控制項中。究竟要採用哪一種邏輯,端視使用者的需求而定。不過我想大家對於第一個網頁的設計方式肯定沒有什麼問題與意見,應該會較好奇第二個網頁該如何設計。
我們必須聲明在先,事實上,如果完全自行撰寫程式碼來提取資料,第二個網頁根本也沒什麼特別的技巧可談,問題就在於,如果我們要完全透過介面工具來設定以便善用 Visual Studio 2005 的開發介面的話,就需要用到一些技巧,其中當然也包括 SqlDataSource 物件的 CancelSelectOnNullParameter 屬性。
圖表 1
圖表 2
基本上,圖表 2 所示的網頁在設計上,必須注意下列關鍵技巧:
q 首先,必須如下所示,賦予 DropDownList 的第一個選項(也就是預設選項「請選擇一個部門」)的 value 屬性一個空字串:
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSource1"
DataTextField="部門"
DataValueField="部門"
AppendDataBoundItems="True" Width="208px">
<asp:ListItem Selected="True" Value="">請選擇一個部門</asp:ListItem>
</asp:DropDownList>
q 使用者從 DropDownList 控制項中所選取的選項會指派給GridView 控制項之資料來源的 SqlDataSource 物件,以便以其作為 SELECT 陳述式之 WHERE 子句的篩選值來提取資料。大家必須瞭解的是,在預設狀態下,如果控制項參數的值為空字串將會被視為NULL值(如圖表 3 所示),再加上SqlDataSource物件的 CancelSelectOnNullParameter 屬性的預設值為 True,也就是說,如果控制項參數為 NULL 值的時候,SqlDataSource 物件將不會執行資料提取操作。
我們之前已經將「請選擇一個部門」選項的 value 屬性設定成一個空字串,因此當使用者選取此選項時,控制項參數將會是 NULL 值,因此並不會去提取資料。但是就我們的需求而言,卻希望當使用者從 DropDownList 控制項中選取「請選擇一個部門」選項時仍然要去執行資料提取操作,欲達此目的,必須將作為 GridView 控制項之 SqlDataSource 物件的 CancelSelectOnNullParameter 屬性設定成 False。
q 不過這樣做還不夠。最後一項設定,就是必須將作為 GridView 控制項之 SqlDataSource 物件的 SELECT 陳述式改寫如下:(請特別注意 WHERE 子句的寫法)
SELECT [員工編號], [姓名], [性別], [目前薪資], [部門]
FROM [章立民研究室]
WHERE ([部門] = IsNull(@部門, 部門))
我想大家看完本文以後,可能會覺得這樣做很麻煩,事實上,有些時候自己撰寫程式來完成各項資料存取作業反而會更加直接、明確、且簡易,該採用何者,您就自個兒衡量吧!
章立民研究室
圖表 3