共用方式為


HOW TO:啟用 SqlDataSource 控制項的篩選功能

更新:2007 年 11 月

SqlDataSource 控制項可讓您篩選 (排序或選取) 查詢結果,而不需重新執行查詢。藉由將篩選條件加入至 SqlDataSource控制項,您可以在查詢完成執行後,變更 SqlDataSource 可用的資料,而不需返回資料庫。

這個主題顯示如何啟用 SqlDataSource控制項的篩選功能。繫結至 SqlDataSource 控制項的資料繫結控制項 (如 GridView 控制項) 只會顯示篩選後的結果。

若要使用篩選功能,您必須設定 SqlDataSource 控制項,以傳回資料集中的資訊並快取它的結果。然後,您可以指定篩選條件運算式,它會以 RowFilter 屬性的形式套用至構成 SqlDataSource 控制項基礎的 DataView 物件。

篩選條件可包含以其他控制項、Cookie、工作階段變數或查詢字串之值為依據的參數。例如,如果 DropDownList 控制項包含縣市名稱,則您可以使用 DropDownList 控制項中所選取的縣市做為篩選參數。

注意事項:

建立具有參數的篩選條件運算式,不同於建立參數型 SelectCommand 屬性並指定 SelectParameters 屬性值。參數型篩選條件會將不同的資料檢視套用至快取的資料集。參數型選取命令會對資料來源執行查詢。

啟用 SqlDataSource 控制項的篩選功能

  1. 使用有效連接字串和 select 陳述式建立 SqlDataSource 控制項。如需詳細資訊,請參閱 HOW TO:使用 SqlDataSource 控制項連接至 SQL Server 資料庫 (Visual Studio)

  2. SqlDataSource 控制項的 DataSourceMode 屬性設定為 DataSet

  3. SqlDataSource 控制項的 EnableCaching 屬性設定為 true。

    若要支援篩選功能,必須快取由查詢所傳回的資料。

  4. SqlDataSource 控制項的 CacheDuration 屬性設定為您想要快取資料的秒數。您所選擇的秒數視應用程式而定。

  5. 將控制項的 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 控制項

  1. SqlDataSource 控制項中的 FilterExpression 屬性設定為包含篩選條件參數值之替代符號 (Placeholder) 的運算式。替代符號使用語法 {n},其中 n 表示參數的循序順序。

    下列範例顯示參數型篩選條件運算式。第二個運算式包含多個參數替代符號 (Placeholder)。

    FilterExpression="category = '{0}'"
    FilterExpression="country = '{0}' AND city = '{1}'"
    
  2. 建立 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>
    

請參閱

概念

使用資料來源控制項快取資料