Repeater, ListView, DataList, DataGrid, GridView… Mana yang harus dipilih?

111

Begitu banyak kontrol yang berbeda untuk dipilih! Apa praktik terbaik untuk menentukan kontrol mana yang digunakan untuk menampilkan data di ASP.NET?

mattruma
sumber
2
Pertanyaan ini hanya memiliki satu jawaban pasti: Tergantung. Apa yang sedang Anda coba lakukan?
Tomalak
@Tomalak Saya hanya menampilkan daftar data ... biasanya saya hanya menggunakan Repeater tetapi ingin melihat pro / kontra penggunaan yang lain.
mattruma

Jawaban:

144

Ini benar-benar tentang apa yang ingin Anda capai

  • Gridview - Terbatas dalam desain, bekerja seperti tabel html. Lebih banyak lagi dalam fungsionalitas bawaan seperti edit / perbarui, halaman, urutkan. Banyak biaya tambahan.

  • DataGrid - Versi lama dari Gridview. Gridview adalah super datagrid.

  • Datalist - versi Gridview yang lebih dapat disesuaikan. Juga memiliki beberapa overhead. Lebih banyak pekerjaan manual karena Anda harus mendesainnya sendiri.

  • ListView - Datalist baru :). Hampir merupakan gabungan dari datalist dan gridview di mana Anda dapat menggunakan paging dan build dalam fungsi seperti Gridview, tetapi memiliki kebebasan desain. Salah satu kontrol baru di keluarga ini

  • Repeater - Bobot yang sangat ringan. Tidak ada fungsi bawaan seperti Header, Footer. Memiliki overhead paling sedikit.

WebDude
sumber
12
Apakah masih up to date jawaban ini? (sejak 2008 dan 2013)
Michel Ayres
3
@Michel Repeater menjadi sangat diketik sejak .NET 4.5. Saya sangat menyukainya.
Evgeni Nabokov
1
@MichelAyres Saya akan mengatakan ya secara umum. Meskipun MS telah membuat beberapa pembaruan pada formulir web sejak 2008, gagasan umum yang disampaikan dalam jawabannya sama.
akousmata
2
Hmmm .. "Tidak ada fungsi bawaan seperti header, footer", ada HeaderTemplate dan FooterTemplate .. jika Anda ingin memasukkan hal-hal seperti tag <table> dan </table>.
Iklan
28

Semua orang menyukainya: Itu Tergantung.

Sekarang untuk beberapa panduan khusus (memperluas jawaban luar biasa WebDude di atas) ...

Apakah desain Anda cocok dengan spreadsheet alami atau tampilan kisi dari data? GridView .

Apakah Anda perlu menampilkan daftar atau tampilan data yang diformat lainnya, mungkin dengan header dan footer, dan mungkin dengan kontrol dan / atau pemformatan khusus untuk setiap record data? (EG, tautan ubahsuaian, mungkin Tombol Tautan, atau kontrol edit khusus?) Apakah tampilan ini secara khusus tidak sesuai secara alami dengan tampilan spreadsheet atau kisi? ListView

Jika Anda memenuhi semua kriteria ListView, tetapi secara alami Anda akan cocok dengan kisi, Anda dapat mempertimbangkan DataList .

Saya menggunakan Repeater ketika saya hanya membutuhkan beberapa data dasar yang diiterasi dengan beberapa bit desain khusus, tidak ada header, tidak ada footer, bagus dan bersih.

John Rudy
sumber
19

Tampilan Markup

Mendeklarasikan kode sampel berikut dimungkinkan untuk semua 3 (ListView, DataList, Repeater)

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

dalam daftar berikut Anda dapat melihat templat dan opsi yang tersedia untuk masing-masingnya dan melihat perbedaannya sendiri

ListView (perhatikan edit, group, insert, layout)

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

DataList (perhatikan pasangan Style)

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

Pengulang

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

Tampilan Kode (tampilan lanjutan)

CompositeDataBoundControl :

lihat hierarki kelas berikut (dan kontrol terkait).

kontrol ini menghosting kontrol asp.net lain di templatnya untuk menampilkan data terikat kepada pengguna

Kelas CompositeDataBoundControl (dan kontrol terkait)

Beberapa deskripsi untuk klarifikasi yang lebih baik

Kontrol ListView

Kontrol ListView juga menggunakan templat untuk menampilkan data. Namun, ini mendukung banyak templat tambahan yang memungkinkan lebih banyak skenario saat bekerja dengan data Anda. Template ini termasuk LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

Kontrol ListView ( tidak seperti DataList dan Repeater ) juga secara implisit mendukung kemampuan untuk mengedit, menyisipkan, dan menghapus data dengan menggunakan kontrol sumber data. Anda dapat menentukan template individual untuk masing-masing skenario ini.

Kontrol DataList

Kontrol DataList bekerja seperti kontrol Repeater . Ini mengulangi data untuk setiap baris dalam kumpulan data Anda, dan ini menampilkan data ini sesuai dengan templat yang Anda tentukan. Namun , ini menjabarkan data yang ditentukan dalam template dalam berbagai struktur HTML. Ini termasuk opsi untuk tata letak horizontal atau vertikal, dan ini juga memungkinkan Anda untuk mengatur bagaimana data harus diulang, sebagai tata letak alur atau tabel.

Kontrol DataList tidak secara otomatis menggunakan kontrol sumber data untuk mengedit data. Sebagai gantinya, ia menyediakan peristiwa perintah di mana Anda dapat menulis kode Anda sendiri untuk skenario ini. Untuk mengaktifkan kejadian ini, Anda menambahkan kontrol Tombol ke salah satu templat dan menyetel properti CommandName tombol ke kata kunci edit, hapus, perbarui, atau batalkan. Acara yang sesuai kemudian dimunculkan oleh kontrol DataList.

Kontrol Repeater

Kontrol Repeater juga menggunakan template untuk menentukan pengikatan kustom. Namun, ini tidak menampilkan data sebagai catatan individu. Sebaliknya, ini mengulangi baris data seperti yang Anda tentukan di template Anda. Ini memungkinkan Anda membuat satu baris data dan mengulanginya di seluruh halaman Anda.

Kontrol Repeater adalah template hanya baca . Artinya, ini hanya mendukung ItemTemplate. Itu tidak secara implisit mendukung pengeditan, penyisipan, dan penghapusan. Anda harus mempertimbangkan salah satu kontrol lain jika Anda memerlukan fungsionalitas ini, jika tidak, Anda harus membuat kode sendiri untuk kontrol Repeater.


Deskripsi di atas berasal dari MCTS Exam 70-515 Pengembangan Aplikasi Web dengan buku Microsoft.NET Framework 4 .

DataGrid bahkan tidak disebutkan dalam buku ini dan digantikan oleh GridView yang populer dan dijawab dengan baik oleh pengguna lain

Iman
sumber
1
Deskripsi bagus dari semua jawaban!
Ali007
Ya ampun ... definisi jawaban lengkap. Sudah selesai dilakukan dengan baik.
pengguna3308043
6

Memang! Saya telah menulis blog tentang perbedaan antara alat data ASP.NET 4.0 . Pada dasarnya, tampilan kisi adalah cara paling ampuh untuk menyajikan informasi tabel, sedangkan kontrol ListView adalah untuk tampilan data berulang yang lebih rumit. Jika saya memberikan saran kepada pemula ASP.NET, saya akan memberi tahu mereka untuk mempelajari tampilan grid luar dalam dan mengabaikan kontrol lain untuk memulai.

Andy Brown
sumber
Hanya untuk menambahkan komentar ke blog saya sendiri: 2-3 tahun ke depan, apa yang sebenarnya saya rekomendasikan adalah mempelajari ASP.NET MVC sebagai gantinya, yang membuat pertanyaan tidak relevan (dan juga membuat acara mengangkat dari grid menjadi sepele). Namun, ini adalah kurva belajar PANJANG!
Andy Brown
5

Semuanya bermuara pada bagaimana Anda ingin mengatur tata letak data Anda.

Jika Anda perlu mengontrol tata letak (seperti tabel versus CSS versus apa pun), saat menggunakan Repeater atau ListView. Di antara keduanya, ListView memberi Anda lebih banyak peristiwa dan perintah bawaan untuk mengedit, memilih, menyisipkan. Selain itu fungsi paging dan pengelompokan. Repeater sangat sederhana, ia mengulangi tata letak dengan data. Karena Anda membuat tata letak dengan tangan, Listview dan Repeater memerlukan lebih banyak kode.

GridView adalah DataGrid yang diperbarui sehingga hampir tidak ada alasan untuk menggunakan DataGrid. GridView bekerja dengan sangat baik saat dihubungkan ke sumber data ASP.NET standar, tetapi membatasi Anda ke tata letak tabular dengan banyak aturan tata letak. GridView memerlukan lebih sedikit kode karena Anda menggunakan tata letak bawaan.

Joseph Daigle
sumber