Répéteur, ListView, DataList, DataGrid, GridView… Lequel choisir?

111

Tant de commandes différentes à choisir! Quelles sont les meilleures pratiques pour déterminer le contrôle à utiliser pour afficher des données dans ASP.NET?

mattruma
la source
2
Cette question n'a qu'une seule réponse définitive: cela dépend. Qu'essayez-vous de faire?
Tomalak du
@Tomalak J'affiche juste une liste de données ... normalement, j'utilise juste le répéteur mais je veux voir les avantages / inconvénients de l'utilisation des autres.
mattruma le

Réponses:

144

Il s'agit vraiment de ce que vous essayez d'accomplir

  • Gridview - Conception limitée, fonctionne comme une table html. Plus de fonctionnalités intégrées telles que modifier / mettre à jour, page, trier. Beaucoup de frais généraux.

  • DataGrid - Ancienne version de Gridview. Un gridview est un super datagrid.

  • Datalist - version plus personnalisable de Gridview. A également des frais généraux. Plus de travail manuel car vous devez le concevoir vous-même.

  • ListView - le nouveau Datalist :). Presque un hybride de datalist et de gridview où vous pouvez utiliser la pagination et construire dans Gridview comme des fonctionnalités, mais avoir la liberté de conception. L'un des nouveaux contrôles de cette famille

  • Répéteur - Très léger. Aucune fonctionnalité intégrée comme les en-têtes, les pieds de page. A le moins de frais généraux.

WebDude
la source
12
Cette réponse est-elle toujours à jour? (depuis 2008 et 2013)
Michel Ayres
3
@Michel Repeater est devenu fortement typé depuis .NET 4.5. J'aime beaucoup cela.
Evgeni Nabokov
1
@MichelAyres Je dirais oui en général. Bien que MS ait mis à jour les formulaires Web depuis 2008, les idées générales véhiculées dans la réponse sont les mêmes.
akousmata
2
Hmmm .. "Pas de fonctionnalité intégrée comme les en-têtes, les pieds de page", eh bien, il y a le HeaderTemplate et le FooterTemplate .. si vous voulez mettre des choses comme vos balises <table> et </table>.
Annonces du
28

Tout le monde l'a frappé: ça dépend.

Maintenant, pour quelques conseils spécifiques (développant l'excellente réponse de WebDude ci-dessus) ...

Votre conception s'inscrit-elle dans une feuille de calcul naturelle ou une vue en grille des données? GridView .

Avez-vous besoin d'afficher une liste ou une autre vue formatée des données, éventuellement avec des en-têtes et des pieds de page, et probablement avec des commandes et / ou un formatage spécifiques pour chaque enregistrement de données? (EG, liens personnalisés, éventuellement LinkButtons ou contrôles d'édition spécifiques?) Cet affichage ne s'intègre- t-il pas naturellement dans une feuille de calcul ou une vue en grille? ListView

Si vous répondez à tous les critères de ListView, mais que vous tiendriez naturellement dans une grille, vous pouvez envisager DataList .

Je vais pour Repeater quand j'ai juste besoin de quelques données de base itérées avec des bits de conception personnalisés, pas d'en-tête, pas de pied de page, agréable et propre.

John Rudy
la source
19

Vue d'annotation

La déclaration de l'exemple de code suivant est possible pour les 3 (ListView, DataList, Repeater)

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

dans les listes suivantes Vous pouvez voir les modèles et options disponibles pour chacun d'eux et voir les différences par vous-même

ListView (notez la modification, le groupe, l'insertion, la mise en page)

  • AlternatingltemTemplate
  • EditltemTemplate
  • EmptyDataTemplate
  • EmptyltemTemplate
  • GroupSeparatorTemplate
  • GroupTemplate
  • lnsertltemTemplate
  • ItemSeparatorTemplate
  • ItemTemplate
  • Modèle de mise en page
  • SelectedltemTemplate

DataList (notez les paires de styles)

  • AlternatingltemStyle
  • AlternatingltemTemplate
  • EditltemStyle
  • EditltemTemplate
  • FooterStyle
  • FooterTemplate
  • HeaderStyle
  • HeaderTemplate
  • ItemStyle
  • ItemTemplate
  • SelectedltemStyle
  • SelectedltemTemplate
  • SeparatorStyle
  • SéparateurModèle

Répétiteur

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SéparateurModèle

Vue de code (vue avancée)

CompositeDataBoundControl :

regardez la hiérarchie des classes suivante (et les contrôles associés).

ces contrôles hébergent d'autres contrôles asp.net dans leurs modèles pour afficher les données liées à l'utilisateur

Les classes CompositeDataBoundControl (et les contrôles associés)

Quelques descriptions pour de meilleures clarifications

Le contrôle ListView

Le contrôle ListView utilise également des modèles pour l'affichage des données. Cependant, il prend en charge de nombreux modèles supplémentaires qui permettent plus de scénarios lorsque vous travaillez avec vos données. Ces modèles incluent LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

Le contrôle ListView ( contrairement à DataList et Repeater ) prend également implicitement en charge la possibilité de modifier, d'insérer et de supprimer des données à l'aide d'un contrôle de source de données. Vous pouvez définir des modèles individuels pour chacun de ces scénarios.

Le contrôle DataList

Le contrôle DataList fonctionne comme le contrôle Repeater . Il répète les données pour chaque ligne de votre ensemble de données et affiche ces données en fonction de votre modèle défini. Cependant , il présente les données définies dans le modèle dans diverses structures HTML. Cela inclut des options de mise en page horizontale ou verticale et vous permet également de définir la façon dont les données doivent être répétées, sous forme de flux ou de mise en page de tableau.

Le contrôle DataList n'utilise pas automatiquement un contrôle de source de données pour modifier les données. Au lieu de cela, il fournit des événements de commande dans lesquels vous pouvez écrire votre propre code pour ces scénarios. Pour activer ces événements, vous ajoutez un contrôle Button à l'un des modèles et définissez la propriété CommandName du bouton sur le mot clé edit, delete, update ou cancel. L'événement approprié est ensuite déclenché par le contrôle DataList.

Le contrôle du répéteur

Le contrôle Repeater utilise également des modèles pour définir une liaison personnalisée. Cependant, il n'affiche pas les données sous forme d'enregistrements individuels. Au lieu de cela, il répète les lignes de données que vous spécifiez dans votre modèle. Cela vous permet de créer une seule ligne de données et de la répéter sur votre page.

Le contrôle Repeater est un modèle en lecture seule . Autrement dit, il prend uniquement en charge le ItemTemplate. Il ne prend pas implicitement en charge l'édition, l'insertion et la suppression. Vous devez envisager l'un des autres contrôles si vous avez besoin de cette fonctionnalité, sinon vous devrez le coder vous-même pour le contrôle Repeater.


Les descriptions ci-dessus sont tirées du livre MCTS Exam 70-515 Web Applications Development with Microsoft.NET Framework 4 .

DataGrid n'est même pas mentionné dans ce livre et est remplacé par des GridViews populaires et répond bien par d'autres utilisateurs

Iman
la source
1
Excellentes descriptions de toutes les réponses!
Ali007
Mon Dieu ... la définition d'une réponse complète. Bien joué.
user3308043
6

En effet! J'ai blogué sur les différences entre les outils de données ASP.NET 4.0 . Fondamentalement, les vues en grille sont le moyen le plus puissant de présenter des informations tabulaires, tandis que les contrôles ListView sont destinés à des affichages plus complexes de données répétées. Si je donnais des conseils à un débutant ASP.NET, je leur dirais d'apprendre à fond les vues de grille et d'ignorer les autres contrôles pour commencer.

Andy Brown
la source
Juste pour ajouter un commentaire à mon propre blog: 2-3 ans plus tard, ce que je recommanderais en fait, c'est d'apprendre ASP.NET MVC à la place, ce qui rend la question inutile (et rend également la création d'événements à partir de grilles triviale). Cependant, c'est une LONGUE courbe d'apprentissage!
Andy Brown
5

Tout dépend de la façon dont vous souhaitez mettre en page vos données.

Si vous avez besoin de contrôler la mise en page (comme les tableaux par rapport au CSS par rapport à quoi que ce soit), utilisez un Repeater ou ListView. Entre les deux, ListView vous offre beaucoup plus d'événements et de commandes intégrées pour l'édition, la sélection et l'insertion. Fonctionnalité de pagination et de regroupement supplémentaire. Un répéteur est extrêmement simple, il répète une mise en page avec les données. Puisque vous créez la mise en page à la main, Listview et Repeater nécessitent plus de code.

GridView est un DataGrid mis à jour, il n'y a donc pratiquement aucune raison d'utiliser DataGrid. GridView fonctionne très bien lorsqu'il est connecté à des sources de données ASP.NET standard, mais vous limite à une mise en page tabulaire avec de nombreuses règles de mise en page. GridView nécessite moins de code puisque vous utilisez une disposition intégrée.

Joseph Daigle
la source