Repeater, ListView, DataList, DataGrid, GridView ... Quale scegliere?


111

Tanti controlli diversi tra cui scegliere! Quali sono le procedure consigliate per determinare quale controllo utilizzare per la visualizzazione dei dati in ASP.NET?


2
Questa domanda ha una sola risposta definitiva: dipende. Cosa stai cercando di fare?
Tomalak,

@Tomalak Sto solo visualizzando un elenco di dati ... normalmente uso solo il ripetitore ma voglio vedere i pro / contro dell'utilizzo degli altri.
mattruma

Risposte:


144

Si tratta davvero di ciò che stai cercando di ottenere

  • Gridview - Limitato nel design, funziona come una tabella html. Più funzionalità integrate come modifica / aggiornamento, pagina, ordina. Molte spese generali.

  • DataGrid: vecchia versione di Gridview. Un gridview è un super datagrid.

  • Datalist: versione più personalizzabile di Gridview. Ha anche alcune spese generali. Più lavoro manuale in quanto devi progettarlo da solo.

  • ListView - il nuovo Datalist :). Quasi un ibrido di datalist e gridview in cui è possibile utilizzare il paging e creare funzionalità simili a Gridview, ma con libertà di progettazione. Uno dei nuovi controlli di questa famiglia

  • Ripetitore - Molto leggero. Nessuna funzionalità incorporata come intestazioni, piè di pagina. Ha il minimo sovraccarico.


12
È ancora aggiornata questa risposta? (visto che è del 2008 ed è del 2013)
Michel Ayres

3
@Michel Repeater è diventato fortemente tipizzato da .NET 4.5. Mi piace molto.
Evgeni Nabokov

1
@MichelAyres direi di sì in generale. Sebbene MS abbia apportato alcuni aggiornamenti ai moduli web dal 2008, le idee generali espresse nella risposta sono le stesse.
akousmata

2
Hmmm .. "Nessuna funzionalità incorporata come intestazioni, piè di pagina", beh, ci sono HeaderTemplate e FooterTemplate .. se vuoi inserire cose come i tuoi tag <table> e </table>.
Annunci

28

Tutti gli altri lo hanno colpito: dipende.

Ora per alcune indicazioni specifiche (espandendo l'eccellente risposta di WebDude sopra) ...

Il tuo progetto si inserisce in un foglio di calcolo naturale o in una visualizzazione griglia dei dati? GridView .

Hai bisogno di visualizzare un elenco o un'altra visualizzazione formattata dei dati, possibilmente con intestazioni e piè di pagina, e probabilmente con controlli e / o formattazioni specifici per ogni record di dati? (Ad esempio, collegamenti personalizzati, eventualmente LinkButtons o controlli di modifica specifici?) Questo display specificamente non si adatta naturalmente a un foglio di calcolo o a una visualizzazione griglia?Visualizzazione elenco

Se soddisfi tutti i criteri di ListView, ma ti adatteresti naturalmente a una griglia, puoi prendere in considerazione DataList .

Vado per Repeater quando ho solo bisogno di alcuni dati di base iterati con alcuni bit di progettazione personalizzata, senza intestazioni, senza piè di pagina, belli e puliti.


19

Visualizzazione markup

La dichiarazione del codice di esempio seguente è possibile per tutti e 3 (ListView, DataList, Repeater)

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

negli elenchi seguenti È possibile visualizzare i modelli e le opzioni disponibili per ciascuno di essi e vedere personalmente le differenze

ListView (nota la modifica, il gruppo, l'inserimento, il layout)

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

DataList (nota le coppie di stili)

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

Ripetitore

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

Vista codice (vista avanzata)

CompositeDataBoundControl :

guarda la seguente gerarchia delle classi (e relativi controlli).

questi controlli ospitano altri controlli asp.net nei loro modelli per visualizzare i dati associati all'utente

Le classi CompositeDataBoundControl (e controlli correlati)

Alcune descrizioni per migliori chiarimenti

Il controllo ListView

Il controllo ListView utilizza anche modelli per la visualizzazione dei dati. Tuttavia, supporta molti modelli aggiuntivi che consentono più scenari quando si lavora con i dati. Questi modelli includono LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

Il controllo ListView (a differenza di DataList e Repeater ) supporta anche implicitamente la possibilità di modificare, inserire ed eliminare dati usando un controllo origine dati. È possibile definire modelli individuali per ciascuno di questi scenari.

Il controllo DataList

Il controllo DataList funziona come il controllo Repeater . Ripete i dati per ogni riga del set di dati e visualizza questi dati in base al modello definito. Tuttavia , presenta i dati definiti nel modello all'interno di varie strutture HTML. Ciò include le opzioni per il layout orizzontale o verticale e lo consente anche di impostare il modo in cui i dati devono essere ripetuti, come layout di flusso o tabella.

Il controllo DataList non utilizza automaticamente un controllo origine dati per modificare i dati. Invece, fornisce eventi di comando in cui è possibile scrivere il proprio codice per questi scenari. Per abilitare questi eventi, aggiungi un controllo Button a uno dei modelli e imposta la proprietà CommandName del pulsante sulla parola chiave modifica, elimina, aggiorna o annulla. L'evento appropriato viene quindi generato dal controllo DataList.

Il controllo ripetitore

Il controllo Repeater utilizza anche modelli per definire l'associazione personalizzata. Tuttavia, non mostra i dati come record individuali. Invece, ripete le righe di dati come specificato nel modello. Ciò ti consente di creare una singola riga di dati e di ripeterla su tutta la pagina.

Il controllo Repeater è un modello di sola lettura . Ovvero, supporta solo ItemTemplate. Non supporta implicitamente la modifica, l'inserimento e l'eliminazione. Dovresti considerare uno degli altri controlli se hai bisogno di questa funzionalità, altrimenti dovrai codificarlo tu stesso per il controllo Repeater.


Le descrizioni di cui sopra provengono dal libro MCTS Exam 70-515 Sviluppo di applicazioni Web con Microsoft.NET Framework 4 .

DataGrid non è nemmeno menzionato in questo libro ed è sostituito dai popolari GridViews e hanno risposto piacevolmente da altri utenti


1
Ottime descrizioni di tutte le risposte!
Ali007

Dio mio ... la definizione di una risposta completa. Molto bene.
user3308043

6

Infatti! Ho scritto nel blog sulle differenze tra gli strumenti di dati ASP.NET 4.0 . Fondamentalmente, le visualizzazioni a griglia sono il modo più potente per presentare le informazioni tabulari, mentre i controlli ListView sono per visualizzazioni più complicate di dati ripetuti. Se dessi un consiglio a un principiante di ASP.NET, gli direi di imparare a fondo le visualizzazioni della griglia e di ignorare gli altri controlli per cominciare.


Solo per aggiungere un commento al mio blog: 2-3 anni dopo, quello che consiglierei in realtà è invece imparare ASP.NET MVC, il che rende la domanda irrilevante (e rende banale anche il sollevamento di eventi dalle griglie). Tuttavia, è una lunga curva di apprendimento!
Andy Brown

5

Tutto dipende dal modo in cui desideri disporre i tuoi dati.

Se hai bisogno di controllare il layout (come tabelle contro CSS contro qualsiasi cosa), quando usi un ripetitore o ListView. Tra i due, ListView ti offre molti più eventi e comandi incorporati per la modifica, la selezione e l'inserimento. Inoltre funzionalità di paging e raggruppamento. Un Repeater è estremamente semplice, ripete un layout con i dati. Poiché stai creando il layout a mano, Listview e Repeater richiedono più codice.

GridView è un DataGrid aggiornato, quindi non c'è quasi alcun motivo per utilizzare DataGrid. GridView funziona molto bene quando collegato a origini dati ASP.NET standard, ma ti limita a un layout tabulare con molte regole di layout. GridView richiede meno codice poiché stai usando un layout integrato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.