中继器,ListView,DataList,DataGrid,GridView…选择哪个?


111

如此众多的控件可供选择!确定用于在ASP.NET中显示数据的控件的最佳实践是什么?


2
这个问题只有一个明确的答案:这取决于。你想做什么?
Tomalak

@Tomalak我只是显示数据列表...通常我只使用中继器,但想查看使用其他数据的利弊。
mattruma

Answers:


144

这实际上是关于您想要实现的目标

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

  • DataGrid-Gridview的旧版本。gridview是一个超级数据网格。

  • 数据列表-Gridview的更多可定制版本。也有一些开销。您必须自己设计,需要更多的人工工作。

  • ListView-新的Datalist :)。几乎是数据列表和gridview的混合体,您可以在其中使用分页并在Gridview中构建类似功能,但可以自由设计。这个家族中的新控件之一

  • 直放站-重量很轻。没有内置功能,如页眉,页脚。具有最小的开销。


12
它仍然是最新的答案吗?(因为它来自2008年和2013年)
Michel Ayres

3
自.NET 4.5起,@ Michel Repeater成为强类型。我非常喜欢那个。
Evgeni Nabokov

1
@MichelAyres我通常会说是。自2008年以来,MS对Web表单进行了一些更新,但答案中传达的总体思路是相同的。
akousmata 2014年

2
嗯..“没有内置的功能,如页眉,页脚”,那么,如果您想放入<table>和</ table>标记之类的内容,则有HeaderTemplate和FooterTemplate..。
广告

28

其他人都喜欢:取决于。

现在获取一些具体的指导(扩展上面的WebDude的出色答案)...

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

您是否需要显示列表或其他格式的数据视图,可能带有页眉和页脚,还可能需要为每个数据记录使用特定的控件和/或格式?(例如,EG,自定义链接,可能的LinkBut​​ton或特定的编辑控件?)此显示是否特别自然地适合电子表格或网格视图?列表显示

如果满足ListView的所有条件,但是自然适合网格,则可以考虑使用DataList

当我只需要一些带有一些自定义设计位,无标题,无页脚,美观又干净的基本数据进行迭代时,我会选择Repeater


19

标记视图

声明以下示例代码对于全部3(ListView,DataList,Repeater)都是可能的

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

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

ListView(注意编辑,分组,插入,布局)

  • AlternatingltemTemplate
  • 编辑标签模板
  • 空数据模板
  • EmptyltemTemplate
  • GroupSeparatorTemplate
  • 组模板
  • 模板模板
  • ItemSeparatorTemplate
  • ItemTemplate
  • 布局模板
  • 选定的ltem模板

DataList(注意样式对)

  • 交替样式
  • AlternatingltemTemplate
  • 编辑风格
  • 编辑标签模板
  • 页脚样式
  • 页脚模板
  • 标题样式
  • 标题模板
  • ItemStyle
  • ItemTemplate
  • SelectedltemStyle
  • 选定的ltem模板
  • 分隔符样式
  • 分隔符模板

直放站

  • AlternatingltemTemplate
  • 页脚模板
  • 标题模板
  • ItemTemplate
  • 分隔符模板

代码视图(高级视图)

CompositeDataBoundControl

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

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

CompositeDataBoundControl类(和相关控件)

一些说明以便更好地说明

ListView控件

ListView控件还使用模板来显示数据。但是,它支持许多其他模板,这些模板允许在处理数据时使用更多方案。这些模板包括LayoutTemplate,GroupTemplate,ItemSeparatorTemplate

ListView控件(与DataList和Repeater不同)还隐式支持使用数据源控件来编辑,插入和删除数据的功能。您可以为每种情况定义单独的模板。

数据列表控件

DataList控件的工作方式类似于Repeater控件。它为数据集中的每一行重复数据,并根据定义的模板显示此数据。但是,它在各种HTML结构中对模板中定义的数据进行布局。这包括水平或垂直布局的选项,还允许您设置应如何以流或表格布局方式重复数据。

DataList控件不会自动使用数据源控件来编辑数据。而是提供命令事件,您可以在其中为这些情况编写自己的代码。若要启用这些事件,可以将Button控件添加到模板之一,并将按钮的CommandName属性设置为edit,delete,update或cancel关键字。然后,适当的事件由DataList控件引发。

中继器控制

Repeater控件还使用模板定义自定义绑定。但是,它不会将数据显示为单独的记录。相反,它会重复您在模板中指定的数据行。这使您可以创建一行数据,并使其在页面中重复。

Repeater控件是一个只读模板。也就是说,它仅支持ItemTemplate。它不隐式支持编辑,插入和删除。如果需要此功能,则应考虑使用其他控件之一,否则,您必须自己为Repeater控件编写代码


上面的描述来自使用Microsoft.NET Framework 4的MCTS考试70-515 Web应用程序开发

本书甚至没有提到DataGrid,它被流行的GridView取代,并被其他用户很好地回答了


1
所有答案的精彩描述!
Ali007 2014年

天哪...完整答案的定义。做得好。
user3308043 2014年

6

确实!我已经在博客上介绍了ASP.NET 4.0数据工具之间的差异。基本上,网格视图是呈现表格信息的最强大方法,而ListView控件则用于更复杂的重复数据显示。如果我向ASP.NET新手提供建议,我会告诉他们从内而外学习Gridview,而忽略其他控件。


只是在我自己的博客上添加评论:2-3年后,我实际上建议您学习ASP.NET MVC,这使问题变得无关紧要(并且使从网格引发事件变得微不足道)。但是,这是一条漫长的学习曲线!
安迪·布朗

5

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

如果您需要控制布局(如表格与CSS或其他内容),请使用Repeater或ListView。在这两者之间,ListView为您提供了更多事件以及用于编辑,选择和插入的内置命令。附加的分页和分组功能。中继器非常简单,它会重复数据的布局。由于您是手动构建布局,因此Listview和Repeater需要更多代码。

GridView是更新的DataGrid,因此几乎没有任何理由使用DataGrid。当连接到标准ASP.NET数据源时,GridView确实可以很好地工作,但是将您限制在具有许多布局规则的表格布局中。GridView需要较少的代码,因为您使用的是内置布局。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.