在 GridView Web 伺服器控制項中排序資料
更新:2007 年 11 月
GridView 控制項提供內建的排序功能,而不需要任何編碼。您可以進一步自訂 GridView 控制項的排序功能,方法是使用資料行的自訂 SortExpression 屬性值,以及使用 Sorting 和 Sorted 事件。
排序在 GridView 控制項中的運作方式
GridView 控制項不會執行本身的資料行排序,而是依賴資料來源控制項代表它執行排序。控制項會提供排序的使用者介面 (UI),例如在方格中每個資料行的頂端所顯示的 LinkButton 控制項。但是,GridView 控制項是依賴所繫結之資料來源控制項的資料排序能力。
如果繫結的資料來源控制項可以排序資料,則 GridView 控制項可以和資料來源控制項互動,並透過在選取資料時將 SortExpression 傳遞至資料來源,以要求排序的資料。不是所有資料來源控制項都支援排序,例如 XmlDataSource 控制項就不支援。如果資料來源控制項支援排序,則 GridView 可以利用資料來源控制項做排序。下列清單描述資料來源控制項,以及支援排序所需的組態:
如果 DataSourceMode 屬性設定為 DataSet 或 SortParameterName 屬性設定為 DataSet 或 DataReader,則 SqlDataSource 和 AccessDataSource 控制項可以排序。
如果ObjectDataSource 控制項的 SortParameterName 屬性設定為基礎物件支援的值,則控制項可以排序。
GridView 排序處理序
您可以將 GridView 控制項的 AllowSorting 屬性設定為 true,以啟用這個控制項的預設排序行為。將這個屬性設定為 true 會使 GridView 控制項在資料行行首中呈現 LinkButton 控制項。控制項也會將每個資料行的 SortExpression 屬性隱含設定為所繫結至的資料欄位名稱。例如,如果方格包含的資料行會顯示「北風」範例資料庫中「員工」資料表的 [城市] 資料行,則該資料行的 SortExpression 屬性將設定為 [城市]。
在執行階段時,使用者可以按一下資料行標題中的 LinkButton 控制項,依據該資料行進行排序。按一下連結會使頁面執行回傳,並引發 GridView 控制項的 Sorting 事件。排序運算式 (預設是資料行的名稱) 會當做事件引數的一部分傳遞。Sorting 事件的預設行為是 GridView 控制項將排序運算式傳遞至資料來源控制項。資料來源控制項會包括由方格傳遞的排序參數,執行選取查詢或方法。
執行查詢之後,會引發方格的 Sorted 事件。這個事件可讓您執行查詢後邏輯,例如顯示狀態訊息。最後,資料來源控制項會將 GridView 控制項重新繫結至重新排序查詢的結果。
GridView 控制項不會檢查資料來源控制項是否支援排序,而永遠會將排序運算式傳遞至資料來源。如果資料來源控制項不支援排序,且是在 GridView 控制項中執行排序作業,則 GridView 控制項會擲回 NotSupportedException 例外狀況。您可以在 Sorting 事件的處理常式中攔截這個例外狀況並檢查資料來源,以判斷是否支援排序,或者使用自己的排序邏輯擷取。
控制個別資料行的排序
設定方格的 AllowSorting 屬性可讓您依預設排序資料行。您只要將個別資料行的 SortExpression 屬性設定為空字串 (""),即可停用個別欄位 (例如,BoundField 或 TemplateField 欄位) 的排序。
自訂排序
如果預設排序行為不適用於您的需求,可以自訂方格的排序行為。自訂排序的基本技術是處理 Sorting 事件。在處理常式中,可以進行以下作業:
自訂傳遞至資料來源控制項的排序運算式。根據預設,排序運算式是單一資料行的名稱。您可以在事件處理常式中修改排序運算式。例如,如果您要依照兩個資料行進行排序,可以建立包括這兩個資料行的排序運算式。接著可以將修改過的排序運算式傳遞至資料來源控制項。如需詳細資訊,請參閱 GridViewSortEventArgs.SortExpression 屬性。
建立自己的排序邏輯。例如,如果您正在使用不支援排序的資料來源,則可以在自己的程式碼中執行排序,然後將方格繫結至排序的資料。