web-dev-qa-db-fra.com

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

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

111
mattruma

C'est vraiment ce que vous essayez d'accomplir

  • Gridview - Limité dans la conception, fonctionne comme une table html. Plus de fonctionnalités intégrées comme éditer/mettre à jour, page, trier. Beaucoup de frais généraux.

  • DataGrid - Ancienne version de Gridview. Une grille est une 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 la base de données et de la grille où vous pouvez utiliser la pagination et intégrer des fonctionnalités similaires à Gridview, mais avez 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.

144
WebDude

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'intègre-t-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 contrôles et/ou une mise en forme spécifiques pour chaque enregistrement de données? (EG, liens personnalisés, éventuellement LinkButtons, ou contrôles d'édition spécifiques?) Est-ce que cet affichage spécifiquement ne convient pas naturellement dans une feuille de calcul ou une grille? ListView

Si vous remplissez tous les critères de ListView, mais que vous tiendriez naturellement dans une grille, vous pouvez considérer DataList.

Je choisis Répéteur quand j'ai juste besoin de données de base itérées avec des bits de conception personnalisés, pas d'en-têtes, pas de pieds de page, Nice et propre.

27
John Rudy

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 l'édition, le groupe, l'insertion, la mise en page)

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

DataList (notez les paires de styles)

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

Répéteur

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

Vue Code (vue avancée)

CompositeDataBoundControl :

regardez la hiérarchie de 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

The CompositeDataBoundControl classes(and related controls)

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 lors de l'utilisation de vos données. Ces modèles incluent le LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

Le contrôle ListView ( contrairement à DataList et Repeater ) prend également implicitement en charge la possibilité de modifier, insérer et 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 différentes structures HTML. Cela inclut des options de mise en page horizontale ou verticale, et cela vous permet également de définir la façon dont les données doivent être répétées, sous forme de mise en page de flux ou 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 la 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 ne prend en charge que le ItemTemplate. Il ne prend pas implicitement en charge l'édition, l'insertion et la suppression. Vous devriez considérer 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 extraites du livre Développement des applications Web MCTS Exam 70-515 avec Microsoft.NET Framework 4.

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

19
Iman Abidi

Effectivement! J'ai blogué sur les différences entre les outils de données ASP.NET 4. . Fondamentalement, les vues de grille sont le moyen le plus puissant de présenter des informations tabulaires, tandis que les contrôles ListView sont pour des affichages plus compliqués de données répétées. Si je donnais des conseils à un débutant ASP.NET, je lui dirais d'apprendre la grille de vision à l'envers et d'ignorer les autres contrôles pour commencer.

6
Andy Brown

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

Si vous devez contrôler la mise en page (comme les tableaux par rapport à CSS par rapport à quoi que ce soit), lorsque vous utilisez un répéteur ou ListView. Entre les deux, ListView vous donne beaucoup plus d'événements et de commandes intégrées pour éditer, sélectionner, insérer. Fonctionnalité supplémentaire de pagination et de regroupement. 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 disposition tabulaire avec de nombreuses règles de disposition. GridView nécessite moins de code puisque vous utilisez une disposition intégrée.

5
Joseph Daigle