现在的位置: 首页 > 综合 > 正文

ASP.NET – 如何:对 SqlDataSource 控件启用筛选

2012年02月22日 ⁄ 综合 ⁄ 共 2306字 ⁄ 字号 评论关闭

 

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

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

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

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

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

 

一、为 SqlDataSource 控件启用筛选

·创建带有有效连接字符串和 select 语句的 SqlDataSource 控件。

·将 SqlDataSource 控件的 DataSourceMode 属性设置为 DataSet

·将 SqlDataSource 控件的 EnableCaching 属性设置为 true。为了支持筛选,必须对查询返回的数据进行缓存。

·将 SqlDataSource 控件的 CacheDuration 属性设置为希望数据缓存的秒数。所选择的数字取决于您的应用程序。

将控件的 FilterExpression 属性设置为用于指定返回数据的表达式,如下面的示例所示:

country = 'Germany'

启用筛选的 SqlDataSource 控件将与下面类似:

<asp:SqlDataSource

    ID="SqlDataSource1"

    DataSourceMode="DataSet"

    EnableCaching="true"

    Runat="server"

    SelectCommand="Select * From Customers"

    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"

    FilterExpression="country = 'Germany'">

</asp:SqlDataSource>

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

 

二、带参数筛选

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

 

使用参数筛选 SqlDataSource 控件

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

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

FilterExpression="category = '{0}'"

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

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

ControlParameterCookieParameterFormParameterProfileParameter

SessionParameterParameter

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

 

 

抱歉!评论已关闭.