方法 : SqlDataSource コントロールのフィルタ処理を有効にする

更新 : 2007 年 11 月

SqlDataSource を使用すると、クエリを再実行せずにクエリの結果をフィルタ処理 (並べ替えまたは選択) できます。SqlDataSourceコントロールにフィルタ処理を追加することによって、データベースに戻ることなく、クエリの実行後に SqlDataSource によって使用可能になるデータを変更できます。

ここでは、SqlDataSourceコントロールのフィルタ処理を有効にする方法について説明します。SqlDataSource コントロールにバインドされたデータ バインド コントロール (GridView コントロールなど) は、フィルタ処理された結果だけを表示します。

フィルタ処理を使用するには、データセットの情報を返し、結果をキャッシュするように SqlDataSource コントロールを設定する必要があります。次に、SqlDataSource コントロールの基礎となる DataView オブジェクトに RowFilter プロパティとして適用されるフィルタ式を指定できます。

フィルタは、他のコントロール、Cookie、Session 変数、またはクエリ文字列の値に基づいたパラメータを含むことができます。たとえば、DropDownList コントロールに市の名前が含まれる場合、DropDownList コントロールで選択した市をフィルタ処理のパラメータとして使用できます。

59bfya48.alert_note(ja-jp,VS.90).gifメモ :

パラメータを持つフィルタ式の作成は、パラメータ化された SelectCommand プロパティを作成して SelectParameters プロパティ値を指定するのとは異なります。パラメータ化されたフィルタは、キャッシュされたデータセットに異なるデータ ビューを適用します。パラメータ化された select コマンドは、データ ソースに対してクエリを実行します。

SqlDataSource コントロールのフィルタ処理を有効にするには

  1. 有効な接続文字列と select ステートメントを持つ SqlDataSource コントロールを作成します。詳細については、「方法 : 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>
    

    データベースに対して select コマンドを実行した場合、この SqlDataSource コントロールにバインドされているコントロールはフィルタ処理された結果だけを表示します。

パラメータを使用したフィルタ処理

実行時にのみ取得できる値に基づいて、クエリの結果をフィルタ処理しなければならないこともあります。その場合には、パラメータのプレースホルダを含むフィルタ式を作成し、プレースホルダに設定するフィルタ パラメータを定義できます。フィルタ パラメータは、コントロール、クエリ文字列、Cookie、Session 変数、プロファイル プロパティ、または Form プロパティ値から値を取得できます。

パラメータを使用して SqlDataSource コントロールをフィルタ処理するには

  1. SqlDataSource コントロールの FilterExpression プロパティに、フィルタ パラメータ値のプレースホルダを含む式を設定します。プレースホルダには、構文 {n} を使用します。n は、パラメータの順序を示します。

    次の例は、パラメータ化されたフィルタ式を示します。2 番目の式は、複数のパラメータのプレースホルダを含みます。

    FilterExpression="category = '{0}'"
    FilterExpression="country = '{0}' AND city = '{1}'"
    
  2. SqlDataSource 要素の子として FilterParameters 要素を作成します。フィルタ パラメータのプレースホルダごとに、次のいずれかの型の要素を追加します。

    次の例は、DropDownList コントロールから値を取得するフィルタ パラメータの作成方法を示します。

    <FilterParameters>
      <asp:ControlParameter
       Name="CategoryList" ControlID="DropDownList1" 
       PropertyValue="SelectedValue" />
    </FilterParameters>
    
    59bfya48.alert_note(ja-jp,VS.90).gifメモ :

    パラメータの Name プロパティが必要です。ただし、パラメータは、名前順ではなく、指定順にプレースホルダに一致します。

    パラメータ化されたフィルタを持つ完全な 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>
    

参照

概念

データ ソース コントロールによるデータのキャッシュ