当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

何时使用DataGrid、DataList 或Repeater

欢迎进入.NET社区论坛,与200万技术人员互动交流 >>进入

    摘要:了解 ASP.NET 用于显示数据的三个控件: DataGrid、DataList 和 Repeater。 这些控件中的每一个都有独特的特性以及相关的优点和缺点。 创建显示数据的 ASP.NET 应用程序时,为这项工作选择正确的控件非常重要。 正如将在本文中所看到的一样,选择使用 DataGrid、DataList 还是 Repeater,要权衡下面三个因素: 可用性、开发时间和性能。 (12 页打印页)

    下载 DataControlsPerfTest_Setup.msi。

    本页内容
    简介
    数据 Web 控件之间的相似性
    研究 DataGrid Web 控件
    分析 DataList
    深入研究 Repeater
    小结
    基准设置

    简介
    自从出现了像 Microsoft Active Server Pages (ASP) 这样的简单且基于脚本的 Web 编程技术以来,Web 开发又有了很大的发展。 传统 ASP 中常见的大量枯燥、重复的编码工作,在 Microsoft ASP.NET 中不复存在了。 例如,正如所有传统 ASP 开发人员一度都知道的那样,在传统 ASP Web 页面中显示数据需要下面的伪代码:

    Create connection to the databasePopulate an ADO Recordset with a SQL queryDisplay any header HTML neededFor Each Record in the Recordset   Print out the Recordset field(s) and associated HTML   Move to the next recordNextDisplay 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 控件所需的代码。 具体地说,只需要下面两行代码:

    dataWebControlID.DataSource = someDataSourcedataWebControlID.DataBind()
    通常,赋给数据 Web 控件的 DataSource 属性的 someDataSource 对象是一个 DataSet、SqlDataReader、OleDbDataReader 或一个集合(如 Array、ArrayList 或 System.Collections 命名空间中的其他某个类)。 但是,任何实现 IEnumerable 接口的对象都可以绑定到数据 Web 控件。

    DataBind() 方法枚举指定的 DataSource 中的记录。 对于 DataSource 中的每一条记录,都会创建一个项并追加到数据 Web 控件的 Items 集合中。 数据 Web 控件中的每一项都是一个类实例。 用于控件每一项的特定类取决于该数据 Web 控件。 例如,DataGrid 中的每一项都是 DataGridItem 类的一个实例,而 Repeater 中的每一项都是 RepeaterItem 类的一个实例。

    每个数据 Web 控件会为它的每一项使用不同的类,因为是这些项呈现的方式决定了数据 Web 控件生成的 HTML 标记。 例如,DataGridItem 类是从 TableRow 类中派生的,这意味着每个 DataGridItem 都或多或少地呈现为一个表行。 这很有意义,因为 DataGrid 设计为在 HTML <table> 标记内以表格形式显示数据,在 HTML <table> 中,每一项都呈现为单独一行。 另一方面,Repeater 设计为允许对它的输出进行完全自定义。 因此,RepeaterItem 类不从 TableRow 类中派生并不令人惊讶。

    数据 Web 控件之间的另一个相似性是每个控件都能使用模板提供高度自定义的输出。 DataList 和 Repeater 控件必须 使用模板指定它们的内容,而 DataGrid 则通过 TemplateColumn 列类型可以为特定的列选择使用模板(我们将在下一节"研究 DataGrid Web 控件"中讨论各种不同的 DataGrid 列类型)。

    最后一个值得注意的是 DataGrid 和 DataList 控件是从 WebControl 类中派生的,而 Repeater 控件是从 Control 类中派生的。 WebControl 类包含许多美学方面的属性,例如 BackColor、ForeColor、CssClass、BorderStyle 等。 这意味着如果使用 DataGrid 和 DataList,就可以通过它们从 WebControl 类中继承的属性指定样式设置。 而 Repeater 没有任何这样的样式属性。 正如我们将在"深入研究 Repeater"一节中所讨论的一样,对 Repeater 输出的任何可视设置都必须在 Repeater 的模板中指定。

相关内容
赞助商链接