如何:对 SqlDataSource 控件启用筛选
更新:2007 年 11 月
SqlDataSource 控件允许您在不重新运行查询的情况下筛选(排序或选择)查询结果。通过向 SqlDataSource 控件添加筛选,可以在运行查询后更改 SqlDataSource 提供的可用数据,而无需返回数据库。
此主题演示如何为 SqlDataSource 控件启用筛选。绑定到 SqlDataSource 控件的数据绑定控件(如 GridView 控件)将只显示筛选的结果。
若要使用筛选,必须将 SqlDataSource 控件设置为返回数据集中的信息并缓存其结果。然后可以指定将用作 SqlDataSource 控件下的 DataView 对象的 RowFilter 属性的筛选器表达式。
此筛选器可以包括基于其他控件、Cookie、Session 变量或查询字符串的值的参数。例如,如果一个 DropDownList 控件中包含城市名称,则可以使用在 DropDownList 控件中选择的城市作为筛选参数。
说明: |
---|
创建带有参数的筛选器表达式与创建参数化的 SelectCommand 属性和指定 SelectParameters 属性值不同。参数化的筛选器将不同的数据视图应用到缓存的数据集。参数化的选择命令对数据源执行查询。 |
为 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>
对数据库执行选择命令时,绑定到此 SqlDataSource 控件的控件将只显示筛选的结果。
带参数筛选
您常常会希望根据只在运行时为已知的值筛选查询结果。可以创建包括参数占位符的筛选器表达式,然后定义筛选器参数来填充占位符。筛选器参数可以从控件、查询字符串、cookie、Session 变量、配置文件属性或 Form 属性值获取值。
使用参数筛选 SqlDataSource 控件
将 SqlDataSource 控件中的 FilterExpression 属性设置为一个表达式,该表达式中包括表示筛选器参数值的占位符。占位符使用语法 {n},其中 n 指示参数的顺序。
下面的示例演示参数化的筛选器表达式。第二个表达式包括多个参数占位符。
FilterExpression="category = '{0}'" FilterExpression="country = '{0}' AND city = '{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>