Repeater, ListView, DataList, DataGrid, GridView… ¿Cuál elegir?

111

¡Tantos controles diferentes para elegir! ¿Cuáles son las mejores prácticas para determinar qué control usar para mostrar datos en ASP.NET?

mattruma
fuente
2
Esta pregunta tiene una sola respuesta definitiva: depende. ¿Que estás tratando de hacer?
Tomalak
@Tomalak Solo estoy mostrando una lista de datos ... normalmente solo uso el repetidor pero quiero ver los pros / contras de usar los demás.
mattruma

Respuestas:

144

Realmente se trata de lo que intentas lograr

  • Gridview: de diseño limitado, funciona como una tabla html. Más funciones integradas como editar / actualizar, página, ordenar. Mucha sobrecarga.

  • DataGrid: versión antigua de Gridview. Una vista de cuadrícula es una súper cuadrícula de datos.

  • Datalist: versión más personalizable de Gridview. También tiene algunos gastos generales. Más trabajo manual ya que tienes que diseñarlo tú mismo.

  • ListView: el nuevo Datalist :). Casi un híbrido de la lista de datos y la vista de cuadrícula donde puede usar la paginación y compilar en la funcionalidad de Gridview, pero tiene la libertad de diseño. Uno de los nuevos controles de esta familia

  • Repetidor - Peso muy ligero. Sin funcionalidad incorporada como encabezados, pies de página. Tiene menos gastos generales.

WebDude
fuente
12
¿Todavía está actualizada esta respuesta? (ya que es de 2008 y es 2013)
Michel Ayres
3
@Michel Repeater se volvió muy tipado desde .NET 4.5. Me gusta mucho eso.
Evgeni Nabokov
1
@MichelAyres Yo diría que sí en general. Si bien MS ha realizado algunas actualizaciones a los formularios web desde 2008, las ideas generales expresadas en la respuesta son las mismas.
Akousmata
2
Hmmm ... "No hay funciones integradas como encabezados, pies de página", bueno, está el HeaderTemplate y FooterTemplate ... si quieres poner cosas como tus etiquetas <table> y </table>.
Anuncios
28

Todos los demás lo golpearon: depende.

Ahora, para una guía específica (ampliando la excelente respuesta de WebDude anterior) ...

¿Su diseño encaja en una hoja de cálculo natural o en una vista de cuadrícula de los datos? Vista en cuadrícula .

¿Necesita mostrar una lista u otra vista formateada de datos, posiblemente con encabezados y pies de página, y probablemente con controles específicos y / o formato para cada registro de datos? (EG, enlaces personalizados, posiblemente LinkButtons, o controles de edición específicas?) ¿Esta pantalla específicamente no encaja forma natural en una hoja de cálculo o en una vista de cuadrícula? Vista de la lista

Si cumple con todos los criterios de ListView, pero naturalmente encajaría en una cuadrícula, puede considerar DataList .

Voy por repetidor cuando sólo necesito algunos datos básicos iterados con algunos bits de diseño personalizado, sin cabeceras, pies de página hay, agradable y limpio.

John Rudy
fuente
19

Vista de marcado

Declarar el siguiente código de muestra es posible para los 3 (ListView, DataList, Repeater)

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

en las siguientes listas Puedes ver las plantillas y opciones disponibles para cada una de ellas y ver las diferencias por ti mismo

ListView (tenga en cuenta la edición, el grupo, la inserción, el diseño)

  • AlternatingltemTemplate
  • EditltemTemplate
  • EmptyDataTemplate
  • EmptyltemTemplate
  • GroupSeparatorTemplate
  • GroupTemplate
  • lnsertltemTemplate
  • ItemSeparatorTemplate
  • ItemTemplate
  • LayoutTemplate
  • SelectedltemTemplate

DataList (tenga en cuenta los pares de estilos)

  • AlternatingltemStyle
  • AlternatingltemTemplate
  • EditltemStyle
  • EditltemTemplate
  • FooterStyle
  • FooterTemplate
  • HeaderStyle
  • HeaderTemplate
  • ItemStyle
  • ItemTemplate
  • SelectedltemStyle
  • SelectedltemTemplate
  • SeparatorStyle
  • SeparatorTemplate

Reloj de repetición

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

Vista de código (vista avanzada)

CompositeDataBoundControl :

mire la siguiente jerarquía de clases (y controles relacionados).

estos controles alojan otros controles asp.net en sus plantillas para mostrar datos vinculados al usuario

Las clases CompositeDataBoundControl (y controles relacionados)

Algunas descripciones para mejores aclaraciones

El control ListView

El control ListView también usa plantillas para la visualización de datos. Sin embargo, admite muchas plantillas adicionales que permiten más escenarios al trabajar con sus datos. Estas plantillas incluyen LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

El control ListView (a diferencia de DataList y Repeater ) también admite implícitamente la capacidad de editar, insertar y eliminar datos mediante un control de origen de datos. Puede definir plantillas individuales para cada uno de estos escenarios.

El control DataList

El control DataList funciona como el control Repeater . Repite datos para cada fila de su conjunto de datos y muestra estos datos de acuerdo con su plantilla definida. Sin embargo , presenta los datos definidos en la plantilla dentro de varias estructuras HTML. Esto incluye opciones para el diseño horizontal o vertical, y también le permite establecer cómo se deben repetir los datos, como diseño de flujo o tabla.

El control DataList no usa automáticamente un control de fuente de datos para editar datos. En cambio, proporciona eventos de comando en los que puede escribir su propio código para estos escenarios. Para habilitar estos eventos, agregue un control de botón a una de las plantillas y establezca la propiedad CommandName del botón en la palabra clave editar, eliminar, actualizar o cancelar. A continuación, el control DataList genera el evento apropiado.

El control del repetidor

El control Repeater también usa plantillas para definir enlaces personalizados. Sin embargo, no muestra datos como registros individuales. En su lugar, repite las filas de datos como especificas en tu plantilla. Esto le permite crear una sola fila de datos y hacer que se repita en su página.

El control Repeater es una plantilla de solo lectura . Es decir, solo admite ItemTemplate. No admite implícitamente la edición, inserción y eliminación. Debería considerar uno de los otros controles si necesita esta funcionalidad; de lo contrario , tendrá que codificarlo usted mismo para el control Repeater.


Las descripciones anteriores son del libro MCTS Exam 70-515 Desarrollo de aplicaciones web con Microsoft.NET Framework 4 .

DataGrid ni siquiera se menciona en este libro y es reemplazado por GridViews populares y respondido amablemente por otros usuarios

Iman
fuente
1
¡Excelentes descripciones de todas las respuestas!
Ali007
Dios mío ... la definición de una respuesta completa. Bien hecho.
user3308043
6

¡En efecto! He escrito en un blog sobre las diferencias entre las herramientas de datos ASP.NET 4.0 . Básicamente, las vistas de cuadrícula son la forma más poderosa de presentar información tabular, mientras que los controles ListView son para pantallas más complicadas de datos repetidos. Si estuviera dando un consejo a un novato de ASP.NET, le diría que aprenda las vistas de cuadrícula de adentro hacia afuera e ignore los otros controles para empezar.

Andy Brown
fuente
Solo para agregar un comentario a mi propio blog: 2-3 años después, lo que realmente recomendaría es aprender ASP.NET MVC en su lugar, lo que hace que la pregunta sea irrelevante (y también hace que la generación de eventos desde cuadrículas sea trivial). Sin embargo, ¡es una larga curva de aprendizaje!
Andy Brown
5

Todo se reduce a cómo desea distribuir sus datos.

Si necesita controlar el diseño (como tablas versus CSS versus lo que sea), use un Repeater o ListView. Entre los dos, ListView le ofrece muchos más eventos y comandos integrados para editar, seleccionar e insertar. Además, funcionalidad de paginación y agrupación. Un repetidor es extremadamente simple, repite un diseño con los datos. Dado que está creando el diseño a mano, Listview y Repeater requieren más código.

GridView es un DataGrid actualizado, por lo que casi no hay razón para usar DataGrid. GridView funciona muy bien cuando se conecta a fuentes de datos ASP.NET estándar, pero lo restringe a un diseño tabular con muchas reglas de diseño. GridView requiere menos código ya que está usando un diseño integrado.

Joseph Daigle
fuente