09-6
4

ASP.NET 4.0中的新控件QueryExtender

发布:TerryLee | 分类:技术文章

在做Web应用程序开发中,对展示的数据进行筛选时最常见的任务,之前的ASP.NET版本中,我们只能在DataSource控件中设置Where查询子句来实现,但是这种方式针对LinqDataSource和EntityDataSource控件实现起来很不方便,也不易于进行扩展。而在ASP.NET 4.0中,新提出了一个专门为数据筛选而准备的控件QueryExtender,看名字就知道是一个扩展的扩展,它能够扩展到LinqDataSource或EntityDataSource控件上,通过设置各种查询表达式,能够很方便进行数据的筛选。

QueryExtender基本使用方式如下示例代码所示:

<asp:QueryExtender ID="queryExtender" runat="server"
                    TargetControlID="DataSourceBlog">
     ...
</asp:QueryExtender>

而包含在QueryExtender中的是一些Expression,这些Expression都被定义在System.Web.UI.WebControls.Expressions命名空间下面,所以在使用QueryExtender控件之前,需要先注册一下命名空间:

<%@ Register TagPrefix="asp" 
    Namespace="System.Web.UI.WebControls.Expressions"
    Assembly="System.Web.Extensions" %>

首先看一个简单的筛选示例,如下面的示例代码所示:

<asp:LinqDataSource ID="DataSourceBlog" runat="server" 
    ContextTypeName="TerryLee.QueryExtenderDemo.BlogDataContext"
    EntityTypeName="" 
    TableName="Posts">
</asp:LinqDataSource>
<asp:QueryExtender ID="queryExtender" runat="server"
                    TargetControlID="DataSourceBlog">
     <asp:SearchExpression SearchType="Contains" DataFields="Title">
         <asp:ControlParameter ControlID="txtSearch" />
     </asp:SearchExpression>
</asp:QueryExtender>
<br />
<asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>

这里QueryExtender的属性TargetControlID指定的是所作用的DataSource控件ID,在QueryExtender中添加了一个SearchExpression表达式,SearchType指定的是搜索的类型,有三个可选值:Contains、EndsWith、StartsWith。DataFields指定查询哪个字段值,而包含在SearchExpression中的是一个ControlParameter参数,指定用哪个控件的输入值作为输入参数。这样就可以在界面上使用TextBox控件的输入来作为查询条件了。

运行后效果如下:

TerryLee_ASPNET4_001

当输入搜索值之后,按下回车:

TerryLee_ASPNET4_002

如果我们想以某一个范围值来作为查询条件,可以使用RangeExpression表达式,如下示例代码所示:

<asp:LinqDataSource ID="DataSourceBlog" runat="server" 
    ContextTypeName="TerryLee.QueryExtenderDemo.BlogDataContext"
    EntityTypeName="" 
    TableName="Posts">
</asp:LinqDataSource>
<asp:QueryExtender ID="queryExtender" runat="server"
                    TargetControlID="DataSourceBlog">
     <asp:RangeExpression DataField="UnitPrice" MinType="Inclusive" 
            MaxType="Inclusive">
        <asp:ControlParameter ControlID="txtFrom"  />
        <asp:ControlParameter ControlID="txtTo"  />
     </asp:RangeExpression>
</asp:QueryExtender>

除了内置的几个常用Expression之外,还可以使用CustomExpression,即我们可以自定义一个方法,来进行筛选:

<asp:LinqDataSource ID="DataSourceBlog" runat="server" 
    ContextTypeName="TerryLee.QueryExtenderDemo.BlogDataContext"
    EntityTypeName="" 
    TableName="Posts">
</asp:LinqDataSource>
<asp:QueryExtender ID="queryExtender" runat="server"
                    TargetControlID="DataSourceBlog">
     <asp:CustomExpression OnQuerying="FilterPosts"  />
</asp:QueryExtender>

自定义FilterPosts方法:

protected void FilterProducts(object sender, CustomExpressionEventArgs e)
{
    e.Query = from p in e.Query.Cast<Post>()
              where p.ID >= 10
              select p;
}

通过各种类型的表达式,可以极大的实现数据筛选的灵活性,在ASP.NET 4.0中内置的表达式有:

OrderByExpression
MethodExpression
PropertyExpression
RangeExpression
SearchExpression
CustomExpression

本文简单介绍了ASP.NET 4.0中新内置的控件QueryExtender,以实现方便灵活的数据筛选。

当前评分 4.8 , 共有 4 人参与

  • Currently 4.75/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

评论

添加评论


 

biuquote
  • 评论
  • 在线预览
Loading