方法 : SqlDataSource コントロールのフィルタ処理を有効にする
更新 : 2007 年 11 月
SqlDataSource を使用すると、クエリを再実行せずにクエリの結果をフィルタ処理 (並べ替えまたは選択) できます。SqlDataSourceコントロールにフィルタ処理を追加することによって、データベースに戻ることなく、クエリの実行後に SqlDataSource によって使用可能になるデータを変更できます。
ここでは、SqlDataSourceコントロールのフィルタ処理を有効にする方法について説明します。SqlDataSource コントロールにバインドされたデータ バインド コントロール (GridView コントロールなど) は、フィルタ処理された結果だけを表示します。
フィルタ処理を使用するには、データセットの情報を返し、結果をキャッシュするように SqlDataSource コントロールを設定する必要があります。次に、SqlDataSource コントロールの基礎となる DataView オブジェクトに RowFilter プロパティとして適用されるフィルタ式を指定できます。
フィルタは、他のコントロール、Cookie、Session 変数、またはクエリ文字列の値に基づいたパラメータを含むことができます。たとえば、DropDownList コントロールに市の名前が含まれる場合、DropDownList コントロールで選択した市をフィルタ処理のパラメータとして使用できます。
メモ : |
---|
パラメータを持つフィルタ式の作成は、パラメータ化された SelectCommand プロパティを作成して SelectParameters プロパティ値を指定するのとは異なります。パラメータ化されたフィルタは、キャッシュされたデータセットに異なるデータ ビューを適用します。パラメータ化された select コマンドは、データ ソースに対してクエリを実行します。 |
SqlDataSource コントロールのフィルタ処理を有効にするには
有効な接続文字列と select ステートメントを持つ SqlDataSource コントロールを作成します。詳細については、「方法 : 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>
データベースに対して select コマンドを実行した場合、この SqlDataSource コントロールにバインドされているコントロールはフィルタ処理された結果だけを表示します。
パラメータを使用したフィルタ処理
実行時にのみ取得できる値に基づいて、クエリの結果をフィルタ処理しなければならないこともあります。その場合には、パラメータのプレースホルダを含むフィルタ式を作成し、プレースホルダに設定するフィルタ パラメータを定義できます。フィルタ パラメータは、コントロール、クエリ文字列、Cookie、Session 変数、プロファイル プロパティ、または Form プロパティ値から値を取得できます。
パラメータを使用して SqlDataSource コントロールをフィルタ処理するには
SqlDataSource コントロールの FilterExpression プロパティに、フィルタ パラメータ値のプレースホルダを含む式を設定します。プレースホルダには、構文 {n} を使用します。n は、パラメータの順序を示します。
次の例は、パラメータ化されたフィルタ式を示します。2 番目の式は、複数のパラメータのプレースホルダを含みます。
FilterExpression="category = '{0}'" FilterExpression="country = '{0}' AND city = '{1}'"
SqlDataSource 要素の子として FilterParameters 要素を作成します。フィルタ パラメータのプレースホルダごとに、次のいずれかの型の要素を追加します。
次の例は、DropDownList コントロールから値を取得するフィルタ パラメータの作成方法を示します。
<FilterParameters> <asp:ControlParameter Name="CategoryList" ControlID="DropDownList1" PropertyValue="SelectedValue" /> </FilterParameters>
メモ : パラメータの 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>