Repeater, ListView, DataList, DataGrid, GridView… Welche zur Auswahl?

111

So viele verschiedene Steuerelemente zur Auswahl! Welche Best Practices gibt es, um zu bestimmen, welches Steuerelement zum Anzeigen von Daten in ASP.NET verwendet werden soll?

Mattruma
quelle
2
Diese Frage hat nur eine endgültige Antwort: Es kommt darauf an. Was versuchst du zu machen?
Tomalak
@Tomalak Ich zeige nur eine Liste von Daten an ... normalerweise benutze ich nur den Repeater, möchte aber die Vor- und Nachteile der Verwendung der anderen sehen.
Mattruma

Antworten:

144

Es geht wirklich darum, was Sie erreichen wollen

  • Gridview - Eingeschränkt im Design, funktioniert wie eine HTML-Tabelle. Weitere integrierte Funktionen wie Bearbeiten / Aktualisieren, Seite, Sortieren. Viel Aufwand.

  • DataGrid - Alte Version von Gridview. Eine Rasteransicht ist ein Super-Datagrid.

  • Datalist - anpassbarere Version des Gridview. Hat auch etwas Overhead. Mehr manuelle Arbeit, da Sie sie selbst entwerfen müssen.

  • ListView - der neue Datalist :). Fast eine Mischung aus Datenliste und Gridview, bei der Sie Paging verwenden und Gridview-ähnliche Funktionen einbauen können, aber die Freiheit des Designs haben. Eine der neuen Steuerungen in dieser Familie

  • Repeater - Sehr leicht. Keine eingebauten Funktionen wie Kopf- und Fußzeilen. Hat den geringsten Overhead.

WebDude
quelle
12
Ist diese Antwort noch aktuell? (da es von 2008 und 2013 ist)
Michel Ayres
3
@Michel Repeater wurde seit .NET 4.5 stark typisiert. Das gefällt mir sehr gut.
Evgeni Nabokov
1
@MichelAyres Ich würde generell ja sagen. Während MS seit 2008 einige Aktualisierungen an Webformularen vorgenommen hat, sind die in der Antwort enthaltenen allgemeinen Ideen dieselben.
Akousmata
2
Hmmm .. "Keine eingebauten Funktionen wie Kopf- und Fußzeilen", nun, es gibt die HeaderTemplate und die FooterTemplate .., wenn Sie Dinge wie Ihre <table> - und </ table> -Tags einfügen möchten.
Anzeigen
28

Alle anderen haben es geschafft: Es kommt darauf an.

Nun zu einer spezifischen Anleitung (Erweiterung der hervorragenden Antwort von WebDude oben) ...

Passt Ihr Design in eine natürliche Tabellenkalkulation oder Rasteransicht der Daten? GridView .

Müssen Sie eine Liste oder eine andere formatierte Ansicht von Daten anzeigen, möglicherweise mit Kopf- und Fußzeilen und möglicherweise mit spezifischen Steuerelementen und / oder Formatierungen für jeden Datensatz? (ZB angepasste Links, möglicherweise LinkButtons oder bestimmte Bearbeitungssteuerelemente?) Passt diese Anzeige nicht auf natürliche Weise in eine Tabellenkalkulations- oder Rasteransicht? Listenansicht

Wenn Sie alle Kriterien von ListView erfüllen, aber natürlich in ein Raster passen, können Sie DataList in Betracht ziehen .

Ich entscheide mich für Repeater, wenn ich nur einige grundlegende Daten benötige, die mit einigen benutzerdefinierten Designbits iteriert wurden, keine Kopf- und Fußzeilen, schön und sauber.

John Rudy
quelle
19

Markup-Ansicht

Das Deklarieren des folgenden Beispielcodes ist für alle 3 möglich (ListView, DataList, Repeater).

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

In den folgenden Listen können Sie die verfügbaren Vorlagen und Optionen für jede von ihnen sehen und die Unterschiede selbst sehen

ListView (beachten Sie die Bearbeitung, Gruppe, Einfügung, Layout)

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

Datenliste (beachten Sie die Stilpaare )

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

Verstärker

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

Codeansicht (erweiterte Ansicht)

CompositeDataBoundControl :

Schauen Sie sich die folgende Klassenhierarchie (und die zugehörigen Steuerelemente) an.

Diese Steuerelemente enthalten andere asp.net-Steuerelemente in ihren Vorlagen, um dem Benutzer gebundene Daten anzuzeigen

Die CompositeDataBoundControl-Klassen (und zugehörige Steuerelemente)

Einige Beschreibungen zur besseren Verdeutlichung

Das ListView-Steuerelement

Das ListView-Steuerelement verwendet auch Vorlagen für die Anzeige von Daten. Es werden jedoch viele zusätzliche Vorlagen unterstützt, die mehr Szenarien beim Arbeiten mit Ihren Daten ermöglichen. Diese Vorlagen umfassen LayoutTemplate, GroupTemplate und ItemSeparatorTemplate .

Das ListView-Steuerelement (im Gegensatz zu DataList und Repeater ) unterstützt implizit auch die Möglichkeit, Daten mithilfe eines Datenquellensteuerelements zu bearbeiten, einzufügen und zu löschen. Sie können für jedes dieser Szenarien individuelle Vorlagen definieren.

Das DataList-Steuerelement

Das DataList-Steuerelement funktioniert wie das Repeater- Steuerelement. Es wiederholt Daten für jede Zeile in Ihrem Datensatz und zeigt diese Daten gemäß Ihrer definierten Vorlage an. Die in der Vorlage definierten Daten werden jedoch in verschiedenen HTML-Strukturen dargestellt. Dies umfasst Optionen für das horizontale oder vertikale Layout und ermöglicht es Ihnen auch , festzulegen, wie die Daten wiederholt werden sollen, z. B. als Ablauf- oder Tabellenlayout.

Das DataList-Steuerelement verwendet nicht automatisch ein Datenquellensteuerelement zum Bearbeiten von Daten. Stattdessen werden Befehlsereignisse bereitgestellt, in denen Sie Ihren eigenen Code für diese Szenarien schreiben können. Um diese Ereignisse zu aktivieren, fügen Sie einer der Vorlagen ein Schaltflächensteuerelement hinzu und setzen die CommandName-Eigenschaft der Schaltfläche auf das Schlüsselwort Bearbeiten, Löschen, Aktualisieren oder Abbrechen. Das entsprechende Ereignis wird dann vom DataList-Steuerelement ausgelöst.

Die Repeater-Steuerung

Das Repeater-Steuerelement verwendet auch Vorlagen, um die benutzerdefinierte Bindung zu definieren. Es werden jedoch keine Daten als einzelne Datensätze angezeigt. Stattdessen werden die Datenzeilen wiederholt, wie Sie in Ihrer Vorlage angegeben haben. Auf diese Weise können Sie eine einzelne Datenzeile erstellen und auf Ihrer Seite wiederholen.

Das Repeater-Steuerelement ist eine schreibgeschützte Vorlage. Das heißt, es wird nur die ItemTemplate unterstützt. Das Bearbeiten, Einfügen und Löschen wird nicht implizit unterstützt. Sie sollten eines der anderen Steuerelemente in Betracht ziehen, wenn Sie diese Funktionalität benötigen. Andernfalls müssen Sie dies selbst für das Repeater-Steuerelement codieren .


Die obigen Beschreibungen stammen aus dem Buch MCTS Exam 70-515 Web Applications Development mit Microsoft.NET Framework 4 .

DataGrid wird in diesem Buch nicht einmal erwähnt und durch beliebte GridViews ersetzt und von anderen Benutzern gut beantwortet

Iman
quelle
1
Tolle Beschreibungen aller Antworten!
Ali007
Meine Güte ... die Definition einer vollständigen Antwort. Gut gemacht.
user3308043
6

Tatsächlich! Ich habe über die Unterschiede zwischen den ASP.NET 4.0-Datentools gebloggt . Grundsätzlich sind Rasteransichten die leistungsstärkste Methode zur Darstellung tabellarischer Informationen, während ListView-Steuerelemente für die kompliziertere Anzeige wiederholter Daten vorgesehen sind. Wenn ich einem ASP.NET-Neuling Ratschläge geben würde, würde ich ihn bitten, die Rasteransichten von innen nach außen zu lernen und die anderen Steuerelemente zunächst zu ignorieren.

Andy Brown
quelle
Nur um meinem eigenen Blog einen Kommentar hinzuzufügen: 2-3 Jahre später würde ich empfehlen, stattdessen ASP.NET MVC zu lernen, was die Frage irrelevant macht (und das Auslösen von Ereignissen aus Gittern trivial macht). Es ist jedoch eine lange Lernkurve!
Andy Brown
5

Alles hängt davon ab, wie Sie Ihre Daten gestalten möchten.

Wenn Sie das Layout steuern müssen (wie Tabellen im Vergleich zu CSS oder was auch immer), verwenden Sie einen Repeater oder ListView. Zwischen den beiden bietet ListView viel mehr Ereignisse und integrierte Befehle zum Bearbeiten, Auswählen und Einfügen. Zusätzliche Paging- und Gruppierungsfunktionen. Ein Repeater ist extrem einfach, er wiederholt ein Layout mit den Daten. Da Sie das Layout von Hand erstellen, benötigen Listview und Repeater mehr Code.

GridView ist ein aktualisiertes DataGrid, daher gibt es kaum einen Grund, DataGrid zu verwenden. GridView funktioniert sehr gut, wenn es mit Standard-ASP.NET-Datenquellen verbunden ist, beschränkt Sie jedoch auf ein tabellarisches Layout mit vielen Layoutregeln. GridView benötigt weniger Code, da Sie ein integriertes Layout verwenden.

Joseph Daigle
quelle