摘要:了解 ASP.NET 用于显示数据的三个控件: DataGrid、DataList 和 Repeater。 这些控件中的每一个都有独特的特性以及相关的优点和缺点。 创建显示数据的 ASP.NET 应用程序时,为这项工作选择正确的控件非常重要。 正如将在本文中所看到的一样,选择使用 DataGrid、DataList 还是 Repeater,要权衡下面三个因素: 可用性、开发时间和性能。 (12 页打印页) 简介 自从出现了像 Microsoft Active Server Pages (ASP) 这样的简单且基于脚本的 Web 编程技术以来,Web 开发又有了很大的发展。 传统 ASP 中常见的大量枯燥、重复的编码工作,在 Microsoft ASP.NET 中不复存在了。 例如,正如所有传统 ASP 开发人员一度都知道的那样,在传统 ASP Web 页面中显示数据需要下面的伪代码:
Create connection to the database Populate an ADO Recordset with a SQL query
Display any header HTML needed For Each Record in the Recordset Print out the Recordset field(s) and associated HTML Move to the next record Next Display any footer HTML needed
例如,要在 HTML <table> 中显示记录集的内容,开发人员则不得不为 <table> 标记 (tag) 生成 HTML 标记 (markup),然后循环遍历记录集中的每一条记录,每次循环生成一个 <tr> 标记,以及许多 <td> 标记和要显示的记录集字段的值。 最后,在循环之后,开发人员需要生成结束 <table> 标记。
传统 ASP 所要求的这种方法有一个很大的缺点: 它把 HTML 内容和 ASP Web 页面的源代码紧密集成在一起。 因为没有分离代码和 HTML 内容,所以更改 HTML 的内容及其困难,尤其是对不懂编程技术的图形艺术家或 Web 设计者来说更是如此。 而且,因为检索数据库结果和生成它的内容都需要代码,所以代码和 HTML 内容的这种集成相对来说需要大量的代码。
幸好,ASP.NET 提供了三个控件,使得在 ASP.NET Web 页面中显示数据绝对比传统 ASP 所需的迭代方式简单得多。 这三个控件是 DataGrid、DataList 和 Repeater,以后我将称之为数据 Web 控件。 也许,如果您已经开发过 ASP.NET Web 页面,那么至少会对这三个控件中的一个有一些经验。 通常,开发人员从学习 DataGrid 开始,这是因为 DataGrid 使用简单以及它具有允许数据排序、分页和编辑的功能。 但是,在 ASP.NET Web 页面中显示数据时,DataGrid 并不总是控件的最佳选择。
在本文中,我们将研究这些数据 Web 控件中每个控件的独特特性。 这些特性赋予每个数据 Web 控件许多优点和缺点。 因为每一个数据 Web 控件都有一些缺点,所以没有可用于任何作业的“完美”控件。 决定使用哪个控件时,必须权衡这三个数据 Web 控件每一个的优点和缺点,然后再决定哪个控件是最合适的。
为了协助进行比较,研究每一个数据 Web 控件时,我们将着重于这三个衡量标准: 可用性(从 Web 访问者的角度)、开发时间和性能。 我们首先快速浏览一下这三个数据 Web 控件之间的相似性。 接下来我们将深入研究 DataGrid,然后研究 DataList,最后查看 Repeater。 对于每一个控件,我们将研究这些控件的功能,并讨论它的功能集是如何影响这些衡量标准的。
返回页首 数据 Web 控件之间的相似性 在研究数据 Web 控件之间的差异(这些差异使它们区别于其他控件)之前,先看一下它们的相似性。 从较高级别观点来看,最基本的相似性是,DataGrid、DataList 和 Repeater都设计为了执行大致相同的操作: 显示数据。 另一个相似性把数据绑定到数据 Web 控件所需的代码。 具体地说,只需要下面两行代码:
返回页首 研究 DataGrid Web 控件 DataGrid Web 控件是这三个数据 Web 控件中功能最多的,但是在自定义控件生成的实际 HTML 标记时,它又是最不灵活的。 呈现的 HTML 标记中的这种不灵活性,是由于 DataGrid 是设计用于使用 HTML <table> 以表格形式显示数据所造成的。 因此,对于每一条绑定到 DataGrid 的记录,都会创建一个单独的表行(<tr>),对于要显示的记录中的每一个字段,都会创建一个单独的表列(<td>)。
为了测试 DataGrid 的性能,我使用了 Microsoft 的免费 Web Application Stress Tool (WAST)。 在本文最后的“基准设置”一节中列出了精确的测试条件和 WAST 设置。 另外,测试使用的代码也可在本文最后下载。
这个 Web Application Stress Tool 会向 Web 服务器发出一组特定的 URL 请求。 对于每一项测试,我都在一分钟之内尽可能快地不断请求一个 URL。 WAST 报告了许多性能衡量标准;我要关注的一个衡量标准是每秒请求数,它表明了 Web 服务器每秒能执行多少次 ASP.NET Web 页面。
DataList 的性能比 DataGrid 的性能好,当 DataList 位于 Web 窗体内时这一点更明显。 图 2 显示了 Web Application Stress Tool 在 DataList 上的测试结果。
图 2: DataList 的每秒请求数
正如图 2 中的结果显示的那样,当 DataList 放置在 Web 窗体内时(因此导致该 Web 控件生成它的 ViewState),该 Web 控件要远胜于 DataGrid。
返回页首 深入研究 Repeater 在所有这三个数据 Web 控件中,Repeater Web 控件在呈现的 HTML 里提供了最大的灵活性。 DataGrid 或 DataList 会在预设的 HTML 标记中自动包含开发人员指定的内容。与它们不同的是,Repeater 在呈现的时候将严格生成指定的 HTML 标记。 因此,如果不想用 HTML <table>或者一系列 <span> 标记显示数据,而希望以其他方式显示数据,就必须使用 Repeater 控件。
返回页首 小结 在 ASP.NET Web 页面中显示数据时,很多开发人员都选择他们最熟悉的数据 Web 控件,通常是 DataGrid。 但是这样的盲目决定不够明智,因为根本没有通用的“最好的”数据 Web 控件。 决定为给定的 Web 页使用哪个数据 Web 控件时,应该先就以下各种问题自己考虑一下,以确定哪个控件最适合手边的任务。 您想允许用户对数据进行排序吗? 需要把数据用非 HTML <table> 的格式显示吗? 页面会被大量访问吗,因而性能是一个关键的问题吗?
因为 DataGrid 能允许最终用户排序、分页和编辑它的数据,所以这三个数据 Web 控件中 DataGrid Web 控件提供了最好的功能集。 因为使用 DataGrid 时只需要把它添加到 Web 页面中并写几行代码,所以 DataGrid 也是最简单易用的数据 Web 控件。 但是,容易使用和强大的功能是要付出代价的,如性能的代价: DataGrid 是三个数据 Web 控件中效率最低的,特别是当把它放置在 Web 窗体中时。