Repeater, ListView, DataList, DataGrid, GridView ... Which to choose?

这么多不同的控件可供选择!决定使用哪个控件在 ASP.NET 中显示数据的最佳实践是什么?

71992 次浏览

这一切都取决于您想要如何布局您的数据。

If you need to control the layout (like tables versus CSS versus whatever), when use a Repeater or ListView. Between the two, ListView gives you a lot more events and built-in commands for editing, selecting, inserting. Additionally paging and grouping functionality. A Repeater is extremely simple, it repeats a layout with the data. Since you're building the layout by hand, Listview and Repeater require more code.

GridView 是一个更新过的 DataGrid,所以几乎没有理由使用 DataGrid。当连接到标准 ASP.NET 数据源时,GridView 工作得非常好,但是限制您使用包含大量布局规则的表格布局。由于使用的是内置布局,GridView 需要的代码更少。

重要的是你想要实现什么

  • Gridview-设计有限,工作原理类似于 html 表。更多内置功能,如编辑/更新,页面,排序。很多开销。

  • DataGrid-Gridview 的旧版本。

  • Datalist-更加可定制的 Gridview 版本。也有一些开销。更多的手工工作,因为你必须自己设计它。

  • ListView-新的 Datalist:)。几乎是数据主义和网格视图的混合体,你可以像在 Gridview 一样使用分页和构建功能,但是有设计的自由。这个家族的新控制之一

  • 重复器-非常轻的重量。没有内置的功能,如页眉,页脚。有最少的开销。

其他人都按了,看情况。

现在为了一些具体的指导(扩展到上面 WebDu 的出色答案) ..。

您的设计是否适合于自然的电子表格或数据的网格视图。

是否需要显示一个列表或其他格式化的数据视图,可能包含页眉和页脚,并且可能包含每个数据记录的特定控件和/或格式?(例如,自定义链接,可能是 LinkButtons,或特定的编辑控件?)这个显示特别适合 没有自然地进入电子表格或网格视图?列表视图

如果您满足 ListView 的所有条件,但是您可以自然地适应网格,那么可以考虑使用 数据列表

当我只是需要一些基本的数据与一些自定义设计位迭代,没有页眉,没有页脚,漂亮和干净。

Indeed! I've blogged on the differences between the ASP.NET 4.0 data tools. Basically, gridviews are the most powerful way to present tabular information, whereas ListView controls are for more complicated displays of repeated data. If I were giving advice to an ASP.NET newbie, I'd tell them to learn gridviews inside out and ignore the other controls to begin with.

标记视图

声明下面的示例代码对于所有3(ListView、 DataList、 Repeater)都是可行的

<asp:ListView runat="server" OnItemCommand="Unnamed1_ItemCommand">
<ItemTemplate> <%# Eval("Name")%>    </ItemTemplate>
<asp:ListView>

在以下列表中,您可以看到每个模板的可用模板和选项,并自己查看其差异

ListView (note the edit,group,insert ,layout)

  • 交替模板
  • 编辑模板
  • EmptyDataTemplate
  • Emptyltemplate
  • 群组分隔模板
  • 群组模板
  • lnsertltemTemplate
  • ItemSeparatorTemplate
  • 项目模板
  • 布局模板
  • SelectedltemTemplate

DataList (注意 Style 对)

  • 交替 ltemStyle
  • 交替模板
  • 编辑风格
  • 编辑模板
  • FooterStyle
  • FooterTemplate
  • 标题风格
  • 标题模板
  • ItemStyle
  • 项目模板
  • SelectedltemStyle
  • SelectedltemTemplate
  • 分离式
  • 分离模板

中继器

  • 交替模板
  • FooterTemplate
  • 标题模板
  • 项目模板
  • 分离模板

代码视图(高级视图)

复合数据边界控制 :

查看下面的类层次结构(和相关控件)。

这些控件在它们的模板中托管其他 asp.net 控件,以便向用户显示绑定数据

The CompositeDataBoundControl classes(and related controls)

为了更好的澄清一些描述

ListView 控件

ListView 控件还使用模板来显示数据 additional templates that allow for more scenarios when working with your data. These templates include the 布局模板,群组模板,项目分离模板.

ListView 控件(不像数据列表和转发器)还隐式支持以下功能 使用数据源控件编辑、插入和删除数据 for each of these scenarios.

DataList 控件

DataList 控件使用 就像中继器一样控件。它为数据集中的每一行重复数据, 它根据定义的模板显示这些数据。 However,它显示定义的数据 在各种 HTML 结构中的模板中。这包括水平或垂直的选项 以及 it also allows you来设置数据应该如何重复,作为流或表的布局。

The DataList control does not automatically use a data source control to edit data. Instead, 它 提供命令事件中,您可以编写自己的代码为这些场景 启用这些事件后,将 Button 控件添加到其中一个模板中,并设置按钮的 属性设置为编辑、删除、更新或取消关键字 然后由 DataList 控件引发。

中继器控制

Repater 控件还使用模板来定义自定义绑定。但是,它不将数据显示为单个记录。相反,它按照您在模板中指定的方式重复数据行。这个 allows you to create a single row of data and have it repeat across your page.

Repater 控件是一个 只读模板,也就是说,它只支持 ItemTemplate。 It does not implicitly support editing, insertion, and deletion. You should consider one of the other controls if you need this functionality, otherwise 你必须自己编写代码 for the Repeater control.


The above Descriptions are from MCTS 考试70-515 Web 应用程序开发与 Microsoft.NET Framework 4 book.

本书中甚至没有提到 DataGrid,取而代之的是流行的 GridView,其他用户也很好地回答了这个问题