HOW TO:啟用 SqlDataSource 控制項的篩選功能
更新:2007 年 11 月
SqlDataSource 控制項可讓您篩選 (排序或選取) 查詢結果,而不需重新執行查詢。藉由將篩選條件加入至 SqlDataSource控制項,您可以在查詢完成執行後,變更 SqlDataSource 可用的資料,而不需返回資料庫。
這個主題顯示如何啟用 SqlDataSource控制項的篩選功能。繫結至 SqlDataSource 控制項的資料繫結控制項 (如 GridView 控制項) 只會顯示篩選後的結果。
若要使用篩選功能,您必須設定 SqlDataSource 控制項,以傳回資料集中的資訊並快取它的結果。然後,您可以指定篩選條件運算式,它會以 RowFilter 屬性的形式套用至構成 SqlDataSource 控制項基礎的 DataView 物件。
篩選條件可包含以其他控制項、Cookie、工作階段變數或查詢字串之值為依據的參數。例如,如果 DropDownList 控制項包含縣市名稱,則您可以使用 DropDownList 控制項中所選取的縣市做為篩選參數。
注意事項: |
---|
建立具有參數的篩選條件運算式,不同於建立參數型 SelectCommand 屬性並指定 SelectParameters 屬性值。參數型篩選條件會將不同的資料檢視套用至快取的資料集。參數型選取命令會對資料來源執行查詢。 |
啟用 SqlDataSource 控制項的篩選功能
使用有效連接字串和 select 陳述式建立 SqlDataSource 控制項。如需詳細資訊,請參閱 HOW TO:使用 SqlDataSource 控制項連接至 SQL Server 資料庫 (Visual Studio)。
將 SqlDataSource 控制項的 DataSourceMode 屬性設定為 DataSet。
將 SqlDataSource 控制項的 EnableCaching 屬性設定為 true。
若要支援篩選功能,必須快取由查詢所傳回的資料。
將 SqlDataSource 控制項的 CacheDuration 屬性設定為您想要快取資料的秒數。您所選擇的秒數視應用程式而定。
將控制項的 FilterExpression 屬性設定為會指定所要傳回資料的運算式,如下列範例所示:
country = 'Germany'
如需篩選條件運算式語法的詳細資訊,請參閱 RowFilter。
啟用篩選功能的 SqlDataSource 控制項應類似下列範例:
<asp:SqlDataSource ID="SqlDataSource1" DataSourceMode="DataSet" EnableCaching="true" Runat="server" SelectCommand="Select * From Customers" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" FilterExpression="country = 'Germany'"> </asp:SqlDataSource>
對資料庫執行選取命令時,繫結至這個 SqlDataSource 控制項的控制項將只會顯示篩選後的結果。
使用參數進行篩選
通常您會想要根據只有在執行階段才能知道的值,來篩選查詢結果。您可以建立包含參數替代符號 (Placeholder) 的篩選條件運算式,然後定義篩選條件參數來填入替代符號 (Placeholder)。篩選條件參數可以從控制項、查詢字串、Cookie、工作階段變數、設定檔屬性或 Form 屬性值取得其值。
若要使用參數來篩選 SqlDataSource 控制項
將 SqlDataSource 控制項中的 FilterExpression 屬性設定為包含篩選條件參數值之替代符號 (Placeholder) 的運算式。替代符號使用語法 {n},其中 n 表示參數的循序順序。
下列範例顯示參數型篩選條件運算式。第二個運算式包含多個參數替代符號 (Placeholder)。
FilterExpression="category = '{0}'" FilterExpression="country = '{0}' AND city = '{1}'"
建立 FilterParameters 項目,做為 SqlDataSource 項目的子系。針對每一個篩選條件參數替代符號 (Placeholder),加入下列其中一個型別的項目:
下列範例顯示如何建立從 DropDownList 控制項取得其值的篩選條件參數:
<FilterParameters> <asp:ControlParameter Name="CategoryList" ControlID="DropDownList1" PropertyValue="SelectedValue" /> </FilterParameters>
注意事項: 需要參數的 Name 屬性。不過,參數是依據循序順序對應至替代符號 (Placeholder),而不是依據名稱。
下列範例顯示完整的 SqlDataSource 控制項如何使用參數型篩選條件進行篩選:
<asp:SqlDataSource ID="SqlDataSource1" EnableCaching="true" DataSourceMode="DataSet" Runat="server" SelectCommand="Select * from Customers" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString1 %>" FilterExpression="country = '{0}'"> <FilterParameters> <asp:ControlParameter Name="countryparam" ControlID="DropDownList1" PropertyName="SelectedValue" /> </FilterParameters> </asp:SqlDataSource>