ASP.NET 2.0 - 關於 CancelSelectOnNullParameter 屬性

摘要: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(@部門, 部門))

 

我想大家看完本文以後,可能會覺得這樣做很麻煩,事實上,有些時候自己撰寫程式來完成各項資料存取作業反而會更加直接、明確、且簡易,該採用何者,您就自個兒衡量吧!

 

章立民研究室 2006/12/27

 


圖表 3