[翻译] 在 ASP.Net 4.0 中使用 QueryExtender 控件创建高效的搜索页面
2009-11-10 02:21
567 查看
li.title {display:block; font-size:16px; font-weight:bold; color:#f00; list-style-type:circle; list-style-position:outside}
a.title {display:block; font-size:16px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none; content:open-quote;}
a.title2 {display:block; font-size:14px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none;font-style:oblique;}
a.download {display:block; font-size:16px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none; }
a.reference {display:block; font-size:16px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none;}
a.conclusion {display:block; font-size:16px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none;}
a.download:after {content:url(../Picture/Small/s003.jpg)}
任何数据驱动网站,创建搜索页面都是一项常见而重复性的任务。为此,我们创建一个带 where 条件的 select 查询,由页面的输入控件提供查询参数。从 .Net 2.0 框架开始,在DataSource 的数据访问控件集的帮助下,数据访问变得容易多了。但是,在既有的数据源控件下,创建复杂过滤条件的查询页面仍然不易完成。基于此需求,微软在 ASP.Net 4.0(当前是 beta1版本)引入了一个扩展控件 QueryExtender,它可结合LINQ工作。
QueryExtender 控件是什么?
QueryExtender 控件在 LINQ技术的辅助下,可以高效过滤数据库的数据。这意味着该控件结合 LINQDataSource 和 EntityDataSource控件,在应用程序后端实现数据过滤。
前提需求:Visual Studio 2010 和 ASP.Net 4.0
Visual Studio 2010 and .Netframework 4.0 当前是 beta 1 版本,您可以从 这里 下载Visual Studio 2010 beta 1 和 .net FX 4。了解下载和安装 Visual Studio 的更多信息,请参考这里。下载并安装该产品。
提示
由于 Visual Studio 10 仍然是 beta 版本,这里讨论的功能可能会变更。如果您有建议或 bug 反馈,请在这里提交信息:visual studio support page 。
为使容易理解,我们将创建一个简单的应用程序,从员工信息表 Employees 里查询员工信息。
步骤
打开 Visual Studio 2010。
点击 New> Website,然后选择 “ASP.Net Web Site”。您可以选择你喜好的语言,我选择了 C#,重命名站点。
在 App_Data 文件夹创建一个数据库,并创建一个数据表 Employees。
提示
您可以这样新增数据库,在解决方案管理器里右击 “App_Data” 文件夹,然后选“ Add New Item”。这里弹出一个对话框,您需要选择“Sql Server Database”,在点击“Add”。然后,用 “Server Explorer”创建一个数据表 Employees 并设置它的必须字段。建表方式:在 Visual Studio 2010 左侧面板,打开Server Explorer,右击刚才新增的数据库,选“Open” 打开您的数据库。
请看我的 Server Explorer:
.
</controls>
</pages>
现在,执行本页面,您将可以看到查询结果。
请看下面图片:
在下面章节,我们实现更多 QueryExtender 提供的查询选项
值域(Range of Values)查询
有时需要查询某个范围内的值,例如,查询员工的年龄在某个范围内(From 到 To)。
为此,我们可以使用 QueryExtender 控件内嵌的 RangeExpression 。
Name: <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
Age From: <asp:TextBox ID="txtFrom" runat="server"></asp:TextBox><br />
Age To: <asp:TextBox ID="txtTo" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Search" />
//GridView code, Refer the code in previous section
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="DataClassesDataContext" EntityTypeName=""
TableName="Employees">
</asp:LinqDataSource>
<asp:QueryExtender ID="QueryExtender1" TargetControlID="LinqDataSource1" runat="server">
<asp:SearchExpression DataFields="EmpName"
SearchType="StartsWith">
<asp:ControlParameter ControlID="txtName" />
</asp:SearchExpression>
<asp:RangeExpression DataField="Age" MinType="Inclusive"
MaxType="Inclusive">
<asp:ControlParameter ControlID="txtFrom" />
<asp:ControlParameter ControlID="txtTo" />
</asp:RangeExpression>
</asp:QueryExtender>
执行页面查看结果,请看下图:
属性值查询
如果我们要查询某个精确值则可以用 PropertyExpression。例如,如果我们希望查询员工的年龄、姓名等列,列出年龄等于某个值的员工。
Name: <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
Age From: <asp:TextBox ID="txtFrom" runat="server"></asp:TextBox><br />
Age To: <asp:TextBox ID="txtTo" runat="server"></asp:TextBox><br />
Temporary Employee: <asp:CheckBox ID="chkIsTempEmployee" runat="server" /><br />
Age <asp:TextBox ID="txtAge" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Search" />
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="DataClassesDataContext" EntityTypeName=""
TableName="Employees">
</asp:LinqDataSource>
<asp:QueryExtender ID="QueryExtender1" TargetControlID="LinqDataSource1" runat="server">
<asp:SearchExpression DataFields="EmpName" SearchType="StartsWith">
<asp:ControlParameter ControlID="txtName" />
</asp:SearchExpression>
<asp:RangeExpression DataField="Age" MinType="Inclusive" MaxType="Inclusive">
<asp:ControlParameter ControlID="txtFrom" />
<asp:ControlParameter ControlID="txtTo" />
</asp:RangeExpression>
<asp:PropertyExpression>
<asp:ControlParameter ControlID="chkIsTempEmployee" Name="IsTemporaryEmployee" />
</asp:PropertyExpression>
<asp:PropertyExpression>
<asp:ControlParameter ControlID="txtAge" Name="Age" />
</asp:PropertyExpression>
</asp:QueryExtender>
执行页面并查看结果,请看下图:
已经清楚看见,新的 QueryExtender 控件使得某些高级查询实现起来非常简单。
下载
Download Source
参考
http://msdn.microsoft.com/en-us/library/dd537669(VS.100).aspx
结语
这样,随 ASP.Net 4.0(当前是 Beta 版)发布的新 QueryExtender 控件,简化了创建查询过滤条件的常用任务。我们在随后的日子里将可以看到更多关于最新框架的新功能。下载本文附带的源代码看看实际运行结果。
Happy Coding!!
From: http://www.codedigest.com/Articles/ASPNET/289_Building_Efficient_Search_Page_Using_QueryExtender_control_in_ASPNet_40.aspx
a.title {display:block; font-size:16px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none; content:open-quote;}
a.title2 {display:block; font-size:14px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none;font-style:oblique;}
a.download {display:block; font-size:16px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none; }
a.reference {display:block; font-size:16px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none;}
a.conclusion {display:block; font-size:16px; font-weight:bold; color:#f00; margin-bottom:14px; margin-top:20px; text-decoration:none;}
a.download:after {content:url(../Picture/Small/s003.jpg)}
任何数据驱动网站,创建搜索页面都是一项常见而重复性的任务。为此,我们创建一个带 where 条件的 select 查询,由页面的输入控件提供查询参数。从 .Net 2.0 框架开始,在DataSource 的数据访问控件集的帮助下,数据访问变得容易多了。但是,在既有的数据源控件下,创建复杂过滤条件的查询页面仍然不易完成。基于此需求,微软在 ASP.Net 4.0(当前是 beta1版本)引入了一个扩展控件 QueryExtender,它可结合LINQ工作。
QueryExtender 控件是什么?
QueryExtender 控件在 LINQ技术的辅助下,可以高效过滤数据库的数据。这意味着该控件结合 LINQDataSource 和 EntityDataSource控件,在应用程序后端实现数据过滤。
前提需求:Visual Studio 2010 和 ASP.Net 4.0
Visual Studio 2010 and .Netframework 4.0 当前是 beta 1 版本,您可以从 这里 下载Visual Studio 2010 beta 1 和 .net FX 4。了解下载和安装 Visual Studio 的更多信息,请参考这里。下载并安装该产品。
提示
由于 Visual Studio 10 仍然是 beta 版本,这里讨论的功能可能会变更。如果您有建议或 bug 反馈,请在这里提交信息:visual studio support page 。
为使容易理解,我们将创建一个简单的应用程序,从员工信息表 Employees 里查询员工信息。
步骤
打开 Visual Studio 2010。
点击 New> Website,然后选择 “ASP.Net Web Site”。您可以选择你喜好的语言,我选择了 C#,重命名站点。
在 App_Data 文件夹创建一个数据库,并创建一个数据表 Employees。
提示
您可以这样新增数据库,在解决方案管理器里右击 “App_Data” 文件夹,然后选“ Add New Item”。这里弹出一个对话框,您需要选择“Sql Server Database”,在点击“Add”。然后,用 “Server Explorer”创建一个数据表 Employees 并设置它的必须字段。建表方式:在 Visual Studio 2010 左侧面板,打开Server Explorer,右击刚才新增的数据库,选“Open” 打开您的数据库。
请看我的 Server Explorer:
.
</controls>
</pages>
现在,执行本页面,您将可以看到查询结果。
请看下面图片:
在下面章节,我们实现更多 QueryExtender 提供的查询选项
值域(Range of Values)查询
有时需要查询某个范围内的值,例如,查询员工的年龄在某个范围内(From 到 To)。
为此,我们可以使用 QueryExtender 控件内嵌的 RangeExpression 。
Name: <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
Age From: <asp:TextBox ID="txtFrom" runat="server"></asp:TextBox><br />
Age To: <asp:TextBox ID="txtTo" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Search" />
//GridView code, Refer the code in previous section
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="DataClassesDataContext" EntityTypeName=""
TableName="Employees">
</asp:LinqDataSource>
<asp:QueryExtender ID="QueryExtender1" TargetControlID="LinqDataSource1" runat="server">
<asp:SearchExpression DataFields="EmpName"
SearchType="StartsWith">
<asp:ControlParameter ControlID="txtName" />
</asp:SearchExpression>
<asp:RangeExpression DataField="Age" MinType="Inclusive"
MaxType="Inclusive">
<asp:ControlParameter ControlID="txtFrom" />
<asp:ControlParameter ControlID="txtTo" />
</asp:RangeExpression>
</asp:QueryExtender>
执行页面查看结果,请看下图:
属性值查询
如果我们要查询某个精确值则可以用 PropertyExpression。例如,如果我们希望查询员工的年龄、姓名等列,列出年龄等于某个值的员工。
Name: <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
Age From: <asp:TextBox ID="txtFrom" runat="server"></asp:TextBox><br />
Age To: <asp:TextBox ID="txtTo" runat="server"></asp:TextBox><br />
Temporary Employee: <asp:CheckBox ID="chkIsTempEmployee" runat="server" /><br />
Age <asp:TextBox ID="txtAge" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Search" />
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="DataClassesDataContext" EntityTypeName=""
TableName="Employees">
</asp:LinqDataSource>
<asp:QueryExtender ID="QueryExtender1" TargetControlID="LinqDataSource1" runat="server">
<asp:SearchExpression DataFields="EmpName" SearchType="StartsWith">
<asp:ControlParameter ControlID="txtName" />
</asp:SearchExpression>
<asp:RangeExpression DataField="Age" MinType="Inclusive" MaxType="Inclusive">
<asp:ControlParameter ControlID="txtFrom" />
<asp:ControlParameter ControlID="txtTo" />
</asp:RangeExpression>
<asp:PropertyExpression>
<asp:ControlParameter ControlID="chkIsTempEmployee" Name="IsTemporaryEmployee" />
</asp:PropertyExpression>
<asp:PropertyExpression>
<asp:ControlParameter ControlID="txtAge" Name="Age" />
</asp:PropertyExpression>
</asp:QueryExtender>
执行页面并查看结果,请看下图:
已经清楚看见,新的 QueryExtender 控件使得某些高级查询实现起来非常简单。
下载
Download Source
参考
http://msdn.microsoft.com/en-us/library/dd537669(VS.100).aspx
结语
这样,随 ASP.Net 4.0(当前是 Beta 版)发布的新 QueryExtender 控件,简化了创建查询过滤条件的常用任务。我们在随后的日子里将可以看到更多关于最新框架的新功能。下载本文附带的源代码看看实际运行结果。
Happy Coding!!
From: http://www.codedigest.com/Articles/ASPNET/289_Building_Efficient_Search_Page_Using_QueryExtender_control_in_ASPNet_40.aspx
相关文章推荐
- 在ASP.Net4.0中使用QueryExtender控件创建高效的搜索页面
- 基于asp.net的web页面动态控件创建以及使用
- 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑
- 基于asp.net的web页面动态控件创建以及使用
- 在 ASP.NET 页面中使用 TreeView 控件
- Visual Studio 2013新建ASP.NET项目使用Empty模板,在页面中使用验证控件出错的解决方案
- 使用JScript.NET创建asp.net页面(七)
- 使用JScript.NET创建asp.net页面(六)
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用
- 使用 ASP.NET 语法创建 Web 服务器控件模板
- [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField
- 在ASP.NET 2.0中使用页面导航控件
- 使用ASP.NET广告控件的XML语言创建广告链接--ASP.NET
- 使用JScript.NET创建asp.net页面(七)
- 在ASP.NET 2.0中使用页面导航控件
- asp.net多选项卡页面的创建及使用方法
- ASP.NET 2.0中使用页面导航控件
- [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField
- 在 ASP.NET 页面中使用 TreeView 控件