Repeater, ListView, DataList, DataGrid, GridView… Który wybrać?


111

Tak wiele różnych elementów sterujących do wyboru! Jakie są najważniejsze wskazówki dotyczące określania, która kontrolka ma być używana do wyświetlania danych w ASP.NET?


2
To pytanie ma tylko jedną ostateczną odpowiedź: to zależy. Co próbujesz zrobić?
Tomalak

@Tomalak Po prostu wyświetlam listę danych ... normalnie używam tylko repeatera, ale chcę zobaczyć zalety / wady używania innych.
mattruma

Odpowiedzi:


144

Tak naprawdę chodzi o to, co próbujesz osiągnąć

  • Gridview - ograniczona w projektowaniu, działa jak tabela html. Więcej wbudowanych funkcji, takich jak edycja / aktualizacja, strona, sortowanie. Dużo kosztów ogólnych.

  • DataGrid - stara wersja widoku Gridview. Gridview to super datagrid.

  • Datalist - bardziej konfigurowalna wersja Gridview. Ma też trochę narzutów. Więcej ręcznej pracy, ponieważ musisz sam to zaprojektować.

  • ListView - nowy Datalist :). Prawie hybryda datalist i gridview, w której można używać stronicowania i budować w Gridview podobnej funkcjonalności, ale masz swobodę projektowania. Jedna z nowych kontrolek w tej rodzinie

  • Repeater - bardzo lekki. Brak wbudowanych funkcji, takich jak nagłówki, stopki. Ma najmniej narzutów.


12
Czy ta odpowiedź jest nadal aktualna? (ponieważ pochodzi z 2008 roku i jest z 2013 roku)
Michel Ayres

3
@Michel Repeater stał się silnie wpisany od .NET 4.5. Bardzo to lubię.
Evgeni Nabokov

1
@MichelAyres Ogólnie powiedziałbym tak. Chociaż firma MS wprowadziła pewne aktualizacje formularzy internetowych od 2008 r., Ogólne pomysły zawarte w odpowiedzi są takie same.
akousmata

2
Hmmm .. "Brak wbudowanych funkcji, takich jak nagłówki, stopki", no cóż, istnieje HeaderTemplate i FooterTemplate .. jeśli chcesz wstawić takie rzeczy jak tagi <table> i </table>.
Reklamy

28

Wszyscy inni to uderzyli: to zależy.

Teraz dla konkretnych wskazówek (rozwinięcie doskonałej odpowiedzi WebDude powyżej) ...

Czy Twój projekt pasuje do naturalnego arkusza kalkulacyjnego lub widoku siatki danych? GridView .

Czy potrzebujesz wyświetlić listę lub inny sformatowany widok danych, ewentualnie z nagłówkami i stopkami oraz prawdopodobnie z określonymi kontrolkami i / lub formatowaniem dla każdego rekordu danych? (Np. Niestandardowe linki, być może LinkButtons lub określone kontrolki edycji?) Czy ten ekran nie pasuje naturalnie do arkusza kalkulacyjnego lub widoku siatki? ListView

Jeśli spełniasz wszystkie kryteria ListView, ale naturalnie pasowałbyś do siatki, możesz rozważyć DataList .

Idę na Repeater, gdy potrzebuję tylko podstawowych danych iterowanych z niestandardowymi bitami projektowymi, bez nagłówków, bez stopek, ładnie i czysto.


19

Widok znaczników

Deklarowanie następującego przykładowego kodu jest możliwe dla wszystkich 3 (ListView, DataList, Repeater)

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

na poniższych listach możesz zobaczyć dostępne szablony i opcje dla każdego z nich oraz samemu zobaczyć różnice

ListView (zwróć uwagę na edycję, grupowanie, wstawianie, układ)

  • AlternatingltemTemplate
  • EditltemTemplate
  • EmptyDataTemplate
  • EmptyltemTemplate
  • GroupSeparatorTemplate
  • Szablon grupy
  • lnsertltemTemplate
  • ItemSeparatorTemplate
  • ItemTemplate
  • LayoutTemplate
  • SelectedltemTemplate

DataList (zwróć uwagę na pary stylów)

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

Przekaźnik

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

Widok kodu (widok zaawansowany)

CompositeDataBoundControl :

spójrz na następującą hierarchię klas (i powiązane kontrolki).

te kontrolki hostują inne kontrolki asp.net w swoich szablonach, aby wyświetlać dane powiązane dla użytkownika

Klasy CompositeDataBoundControl (i powiązane kontrolki)

Kilka opisów dla lepszych wyjaśnień

Formant ListView

Formant ListView używa również szablonów do wyświetlania danych. Obsługuje jednak wiele dodatkowych szablonów, które pozwalają na więcej scenariuszy podczas pracy z danymi. Te szablony obejmują LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

Formant ListView (w przeciwieństwie do DataList i Repeater ) również niejawnie obsługuje możliwość edytowania, wstawiania i usuwania danych przy użyciu kontrolki źródła danych. Możesz zdefiniować indywidualne szablony dla każdego z tych scenariuszy.

Formant DataList

Kontrolka DataList działa podobnie jak kontrolka Repeater . Powtarza dane dla każdego wiersza w zestawie danych i wyświetla te dane zgodnie ze zdefiniowanym szablonem. Jednak przedstawia dane zdefiniowane w szablonie w ramach różnych struktur HTML. Obejmuje to opcje układu poziomego lub pionowego, a także umożliwia ustawienie sposobu powtarzania danych, jako układu przepływu lub układu tabeli.

Formant DataList nie używa automatycznie kontrolki źródła danych do edytowania danych. Zamiast tego udostępnia zdarzenia poleceń, w których można napisać własny kod dla tych scenariuszy. Aby włączyć te zdarzenia, należy dodać kontrolkę Button do jednego z szablonów i ustawić właściwość CommandName przycisku na słowo kluczowe edit, delete, update lub Cancel. Następnie formant DataList wywołuje odpowiednie zdarzenie.

Sterowanie wzmacniaczem

Formant Repeater używa również szablonów do definiowania niestandardowego powiązania. Jednak nie wyświetla danych jako pojedynczych rekordów. Zamiast tego powtarza wiersze danych określone w szablonie. Dzięki temu możesz utworzyć pojedynczy wiersz danych i powtórzyć go na całej stronie.

Formant Repeater jest szablonem tylko do odczytu . Oznacza to, że obsługuje tylko ItemTemplate. Nie obsługuje domyślnie edycji, wstawiania i usuwania. Jeśli potrzebujesz tej funkcji, powinieneś rozważyć jedną z innych kontrolek, w przeciwnym razie będziesz musiał sam ją zakodować dla kontrolki Repeater.


Powyższe opisy pochodzą z książki MCTS Exam 70-515 Tworzenie aplikacji internetowych przy użyciu programu Microsoft.NET Framework 4 .

DataGrid nie jest nawet wspomniany w tej książce i został zastąpiony popularnymi GridViews, a inni użytkownicy ładnie odpowiedzieli


1
Świetne opisy wszystkich odpowiedzi!
Ali007

Mój Boże ... definicja pełnej odpowiedzi. Dobra robota.
user3308043

6

W rzeczy samej! W blogu opisałem różnice między narzędziami danych ASP.NET 4.0 . Zasadniczo widoki siatki są najpotężniejszym sposobem prezentowania informacji tabelarycznych, podczas gdy kontrolki ListView służą do bardziej skomplikowanego wyświetlania powtarzających się danych. Gdybym doradzał nowicjuszowi ASP.NET, powiedziałbym mu, aby nauczył się widoków gridviews od podszewki i na początek zignorował inne kontrolki.


Wystarczy dodać komentarz do mojego własnego bloga: 2-3 lata później, tak naprawdę zalecałbym naukę ASP.NET MVC, co sprawia, że ​​pytanie jest nieistotne (a także sprawia, że ​​wywoływanie zdarzeń z siatek jest trywialne). Jednak jest to DŁUGA krzywa uczenia się!
Andy Brown

5

Wszystko sprowadza się do tego, jak chcesz rozmieścić swoje dane.

Jeśli chcesz kontrolować układ (np. Tabele, CSS, czy cokolwiek), użyj Repeater lub ListView. Między nimi ListView zapewnia znacznie więcej zdarzeń i wbudowanych poleceń do edycji, wybierania, wstawiania. Dodatkowo funkcja stronicowania i grupowania. Repeater jest niezwykle prosty, powtarza układ z danymi. Ponieważ układ tworzysz ręcznie, Listview i Repeater wymagają więcej kodu.

GridView to zaktualizowany DataGrid, więc nie ma prawie żadnego powodu, aby używać DataGrid. GridView działa naprawdę dobrze, gdy jest podłączony do standardowych źródeł danych ASP.NET, ale ogranicza Cię do układu tabelarycznego z wieloma regułami układu. GridView wymaga mniej kodu, ponieważ używasz wbudowanego układu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.