如何:对 SqlDataSource 控件启用筛选

更新:2007 年 11 月

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

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

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

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

59bfya48.alert_note(zh-cn,VS.90).gif说明:

创建带有参数的筛选器表达式与创建参数化的 SelectCommand 属性和指定 SelectParameters 属性值不同。参数化的筛选器将不同的数据视图应用到缓存的数据集。参数化的选择命令对数据源执行查询。

为 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>
    

    对数据库执行选择命令时,绑定到此 SqlDataSource 控件的控件将只显示筛选的结果。

带参数筛选

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

使用参数筛选 SqlDataSource 控件

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

    下面的示例演示参数化的筛选器表达式。第二个表达式包括多个参数占位符。

    FilterExpression="category = '{0}'"
    FilterExpression="country = '{0}' AND city = '{1}'"
    
  2. 创建一个 FilterParameters 元素,作为 SqlDataSource 元素的子级。对于每个筛选器参数占位符,添加属于下面任一类型的元素:

    下面的示例演示如何创建从 DropDownList 控件获取值的筛选器参数:

    <FilterParameters>
      <asp:ControlParameter
       Name="CategoryList" ControlID="DropDownList1" 
       PropertyValue="SelectedValue" />
    </FilterParameters>
    
    59bfya48.alert_note(zh-cn,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>
    

请参见

概念

使用数据源控件缓存数据