Repetidor, ListView, DataList, DataGrid, GridView ... Qual escolher?

111

Muitos controles diferentes para escolher! Quais são as práticas recomendadas para determinar qual controle usar para exibir dados no ASP.NET?

Mattruma
fonte
2
Essa pergunta tem apenas uma resposta definitiva: Depende. O que você está tentando fazer?
Tomalak
@Tomalak Estou apenas exibindo uma lista de dados ... normalmente eu apenas uso o Repetidor, mas quero ver os prós / contras de usar os outros.
mattruma

Respostas:

144

É realmente sobre o que você está tentando alcançar

  • Gridview - Limitado em design, funciona como uma tabela html. Mais na funcionalidade integrada, como editar / atualizar, página, classificação. Muita sobrecarga.

  • DataGrid - versão antiga do Gridview. Um gridview é um super datagrid.

  • Datalist - versão mais personalizável do Gridview. Também tem alguma sobrecarga. Mais trabalho manual, pois você deve projetá-lo sozinho.

  • ListView - o novo Datalist :). Quase um híbrido de datalist e gridview onde você pode usar paginação e construir em Gridview como funcionalidade, mas tem a liberdade de design. Um dos novos controles nesta família

  • Repetidor - Peso muito leve. Nenhuma funcionalidade incorporada como cabeçalhos, rodapés. Tem a menor sobrecarga.

WebDude
fonte
12
Esta resposta ainda está em dia? (já que é de 2008 e é 2013)
Michel Ayres
3
O @Michel Repeater tornou-se fortemente tipado desde .NET 4.5. Eu gosto muito disso.
Evgeni Nabokov
1
@MichelAyres Eu diria sim em geral. Embora a MS tenha feito algumas atualizações nos formulários da web desde 2008, as idéias gerais transmitidas na resposta são as mesmas.
akousmata de
2
Hmmm .. "Nenhuma funcionalidade embutida como cabeçalhos, rodapés", bem, há o HeaderTemplate e FooterTemplate .. se você quiser incluir coisas como suas tags <table> e </table>.
Anúncios de
28

Todos os outros acertaram: Depende.

Agora para algumas orientações específicas (expandindo a excelente resposta do WebDude acima) ...

Seu projeto se encaixa em uma planilha natural ou visualização em grade dos dados? GridView .

Você precisa exibir uma lista ou outra exibição formatada de dados, possivelmente com cabeçalhos e rodapés e provavelmente com controles e / ou formatação específicos para cada registro de dados? (EG, links personalizados, possivelmente LinkButtons ou controles de edição específicos?) Essa exibição não se ajusta de forma natural em uma planilha ou visualização em grade? Exibição de lista

Se você atender a todos os critérios de ListView, mas se encaixar naturalmente em uma grade, você pode considerar DataList .

Eu escolho o Repetidor quando preciso apenas de alguns dados básicos iterados com alguns bits de design personalizado, sem cabeçalhos, sem rodapés, bonitos e limpos.

John Rudy
fonte
19

Visualização de marcação

Declarar o seguinte código de amostra é possível para todos os 3 (ListView, DataList, Repetidor)

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

nas seguintes listas Poderáver os modelos e opções disponíveis para cada um deles e ver as diferenças por si mesmo

ListView (observe a edição, grupo, inserção, layout)

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

DataList (observe os pares de estilos)

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

Repetidor

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

Visualização de código (visualização avançada)

CompositeDataBoundControl :

veja a seguinte hierarquia de classes (e controles relacionados).

esses controles hospedam outros controles asp.net em seus modelos para exibir dados vinculados ao usuário

As classes CompositeDataBoundControl (e controles relacionados)

Algumas descrições para melhores esclarecimentos

O controle ListView

O controle ListView também usa modelos para a exibição de dados. No entanto, ele oferece suporte a muitos modelos adicionais que permitem mais cenários ao trabalhar com seus dados. Esses modelos incluem LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

O controle ListView ( ao contrário de DataList e Repeater ) também suporta implicitamente a capacidade de editar, inserir e excluir dados usando um controle de fonte de dados. Você pode definir modelos individuais para cada um desses cenários.

O controle DataList

O controle DataList funciona como o controle Repetidor . Ele repete os dados para cada linha em seu conjunto de dados e exibe esses dados de acordo com seu modelo definido. No entanto , ele estabelece os dados definidos no modelo dentro de várias estruturas HTML. Isso inclui opções de layout horizontal ou vertical, e também permite definir como os dados devem ser repetidos, como fluxo ou layout de tabela.

O controle DataList não usa automaticamente um controle de fonte de dados para editar dados. Em vez disso, ele fornece eventos de comando nos quais você pode escrever seu próprio código para esses cenários. Para habilitar esses eventos, você adiciona um controle Button a um dos modelos e define a propriedade CommandName do botão para a palavra-chave edit, delete, update ou cancel. O evento apropriado é então gerado pelo controle DataList.

O Controle do Repetidor

O controle Repetidor também usa modelos para definir a vinculação personalizada. No entanto, ele não mostra os dados como registros individuais. Em vez disso, ele repete as linhas de dados conforme você especifica em seu modelo. Isso permite que você crie uma única linha de dados e repita em sua página.

O controle Repetidor é um modelo somente leitura . Ou seja, ele suporta apenas o ItemTemplate. Não oferece suporte implícito para edição, inserção e exclusão. Você deve considerar um dos outros controles se precisar dessa funcionalidade, caso contrário , terá que codificá-lo sozinho para o controle Repetidor.


As descrições acima são do livro Desenvolvimento de aplicativos da Web do Exame 70-515 MCTS com o Microsoft.NET Framework 4 .

O DataGrid nem mesmo é mencionado neste livro e foi substituído por GridViews populares e respondido de maneira agradável por outros usuários

Iman
fonte
1
Ótimas descrições de todas as respostas!
Ali007
Meu Deus ... a definição de uma resposta completa. Bem feito.
user3308043
6

De fato! Eu escrevi sobre as diferenças entre as ferramentas de dados do ASP.NET 4.0 . Basicamente, os gridviews são a maneira mais poderosa de apresentar informações tabulares, enquanto os controles ListView são para exibições mais complicadas de dados repetidos. Se eu estivesse aconselhando um novato em ASP.NET, diria a ele para aprender o gridviews de dentro para fora e ignorar os outros controles para começar.

Andy Brown
fonte
Apenas para adicionar um comentário ao meu próprio blog: 2-3 anos depois, o que eu realmente recomendo é aprender ASP.NET MVC, o que torna a questão irrelevante (e também torna trivial o levantamento de eventos de grades). No entanto, é uma curva de aprendizado LONGA!
Andy Brown de
5

Tudo se resume a como você deseja organizar seus dados.

Se você precisa controlar o layout (como tabelas versus CSS versus qualquer outro), quando usar um Repetidor ou ListView. Entre os dois, ListView oferece muito mais eventos e comandos embutidos para edição, seleção e inserção. Adicionalmente, funcionalidade de paginação e agrupamento. Um Repetidor é extremamente simples, ele repete um layout com os dados. Como você está construindo o layout manualmente, o Listview e o Repetidor requerem mais código.

GridView é um DataGrid atualizado, portanto, dificilmente há razão para usar o DataGrid. GridView funciona muito bem quando conectado a fontes de dados ASP.NET padrão, mas restringe você a um layout tabular com muitas regras de layout. GridView requer menos código, já que você está usando um layout integrado.

Joseph Daigle
fonte