SqlDataSource 控件允许您在不重新运行查询的情况下筛选(排序或选择)查询结果。通过向 SqlDataSource 控件添加筛选,可以在运行查询后更改 SqlDataSource 提供的可用数据,而无需返回数据库。

此主题演示如何为 SqlDataSource 控件启用筛选。绑定到 SqlDataSource 控件的数据绑定控件(如 GridView 控件)将只显示筛选的结果。

若要使用筛选,必须将 SqlDataSource 控件设置为返回数据集中的信息并缓存其结果。然后可以指定将用作 SqlDataSource 控件下的 DataView 对象的 RowFilter 属性的筛选器表达式。

此筛选器可以包括基于其他控件、Cookie、Session 变量或查询字符串的值的参数。例如,如果一个 DropDownList 控件中包含城市名称,则可以使用在 DropDownList 控件中选择的城市作为筛选参数。

 

为 SqlDataSource 控件启用筛选

  1. 创建带有有效连接字符串和 select 语句的 SqlDataSource 控件。有关更多信息,请参见如何:使用 SqlDataSource 控件连接到 SQL Server 数据库
  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 控件的控件将只显示筛选的结果。

带参数筛选

您常常会希望根据只在运行时为已知的值筛选查询结果。可以创建包括参数占位符的筛选器表达式,然后定义筛选器参数来填充占位符。筛选器参数可以从控件、查询字符串、cookie、Session 变量、配置文件属性或 Form 属性值获取值。

使用参数筛选 SqlDataSource 控件

  1. SqlDataSource 控件中的 FilterExpression 属性设置为一个表达式,该表达式中包括表示筛选器参数值的占位符。占位符使用语法 {n},其中,n 指示参数的顺序。
    下面的示例演示参数化的筛选器表达式。第二个表达式包括多个参数占位符。





复制代码



FilterExpression="category = '{0}'"
                FilterExpression="country = '{0}' AND city = '{1}'"


  1. 创建一个 FilterParameters 元素,作为 SqlDataSource 元素的子级。对于每个筛选器参数占位符,添加属于下面任一类型的元素:

下面的示例演示如何创建从 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>