Repeater, ListView, DataList, DataGrid, GridView… Hangisini seçmeli?


111

Aralarından seçim yapabileceğiniz çok sayıda farklı kontrol! ASP.NET'te verileri görüntülemek için hangi denetimin kullanılacağını belirlemek için en iyi yöntemler nelerdir?


2
Bu sorunun tek bir kesin cevabı vardır: Duruma göre değişir. Ne yapmaya çalışıyorsun?
Tomalak

@Tomalak Sadece bir veri listesi görüntülüyorum ... normalde sadece Tekrarlayıcıyı kullanıyorum ama diğerlerini kullanmanın artılarını / eksilerini görmek istiyorum.
mattruma

Yanıtlar:


144

Gerçekten neyi başarmaya çalıştığınla ilgili

  • Gridview - Sınırlı tasarım, html tablosu gibi çalışır. Düzenleme / güncelleme, sayfa, sıralama gibi daha fazla yerleşik işlev. Çok fazla ek yük.

  • DataGrid - Gridview'un eski sürümü. Bir gridview, bir süper veridir.

  • Datalist - Gridview'un daha özelleştirilebilir versiyonu. Ayrıca biraz ek yükü var. Kendiniz tasarlamak zorunda olduğunuz için daha fazla manuel çalışma.

  • ListView - yeni Datalist :). Gridview'da sayfalamayı kullanabileceğiniz ve işlevsellik gibi inşa edebileceğiniz, ancak tasarım özgürlüğüne sahip olduğunuz neredeyse veri uzmanı ve gridview karması. Bu ailedeki yeni kontrollerden biri

  • Tekrarlayıcı - Çok hafif. Üstbilgiler, Altbilgiler gibi yerleşik işlevler yok. En az ek yükü vardır.


12
Hala bu cevap güncel mi? (2008'den beri ve 2013)
Michel Ayres

3
@Michel Repeater, .NET 4.5'ten beri güçlü bir şekilde yazılmıştır. Bunu çok beğendim
Evgeni Nabokov

1
@MichelAyres Genel olarak evet derdim. MS 2008'den beri web formlarında bazı güncellemeler yapmış olsa da, yanıtta iletilen genel fikirler aynıdır.
akousmata

2
Hmmm .. "Üstbilgiler, altbilgiler gibi yerleşik işlevler yok", iyi, HeaderTemplate ve FooterTemplate var .. <table> ve </table> etiketleriniz gibi şeyler eklemek istiyorsanız.
Reklamlar

28

Diğer herkes ona vurdu: Bağımlı.

Şimdi bazı özel rehberlik için (WebDude'un yukarıdaki mükemmel cevabını genişletiyoruz) ...

Tasarımınız, verilerin doğal bir elektronik tablo veya ızgara görünümüne uyuyor mu? GridView .

Muhtemelen üstbilgiler ve altbilgilerle ve muhtemelen her veri kaydı için belirli kontroller ve / veya biçimlendirmeyle birlikte verilerin bir listesini veya diğer biçimlendirilmiş görünümünü görüntülemeniz mi gerekiyor? (Örneğin, özelleştirilmiş bağlantılar, muhtemelen LinkButtons veya belirli düzenleme kontrolleri?) Bu, özellikle değil bir elektronik tablo veya tablo görünümünde içine doğal olarak uyacak? Liste görünümü

ListView'ın tüm kriterlerini karşılıyorsanız, ancak doğal olarak bir ızgaraya sığacaksanız, düşünebilirsiniz sığacaksanız DataList'i .

Sadece bazı özel tasarım bitleri ile yinelenen bazı temel verilere ihtiyaç duyduğumda, üstbilgi yok, altbilgi yok, güzel ve temiz bir şekilde Tekrarlayıcıya gidiyorum .


19

İşaretleme Görünümü

Aşağıdaki örnek kodun bildirilmesi tüm 3 (ListView, DataList, Repeater) için mümkündür

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

Aşağıdaki listelerde her biri için mevcut şablonları ve seçenekleri görebilir ve farkları kendiniz görebilirsiniz.

ListView (düzenleme, grup, ekleme, yerleşim düzenine dikkat edin)

  • AlternatingltemTemplate
  • EditltemTemplate
  • EmptyDataTemplate
  • EmptyltemTemplate
  • GroupSeparatorTemplate
  • GroupTemplate
  • lnsertltemTemplate
  • ItemSeparatorTemplate
  • ıtemtemplate
  • LayoutTemplate
  • SelectedltemTemplate

DataList (Stil çiftlerine dikkat edin)

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

tekrarlayıcı

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ıtemtemplate
  • SeparatorTemplate

Kod Görünümü (gelişmiş görünüm)

CompositeDataBoundControl :

Aşağıdaki sınıf hiyerarşisine (ve ilgili kontrollere) bakın.

bu denetimler, kullanıcıya bağlı verileri görüntülemek için şablonlarında diğer asp.net denetimlerini barındırır

CompositeDataBoundControl sınıfları (ve ilgili denetimler)

Daha iyi açıklamalar için bazı açıklamalar

ListView Denetimi

ListView denetimi ayrıca verilerin görüntülenmesi için şablonlar kullanır. Bununla birlikte, verilerinizle çalışırken daha fazla senaryoya izin veren birçok ek şablonu destekler. Bu şablonlar, LayoutTemplate, GroupTemplate, ItemSeparatorTemplate içerir .

ListView denetimi ( DataList ve Repeater'ın aksine ), bir veri kaynağı denetimi kullanarak verileri düzenleme, ekleme ve silme yeteneğini de dolaylı olarak destekler. Bu senaryoların her biri için ayrı şablonlar tanımlayabilirsiniz.

DataList Denetimi

DataList kontrolü Repeater kontrolü gibi çalışır . Veri kümenizdeki her satır için verileri tekrarlar ve bu verileri tanımladığınız şablona göre görüntüler. Bununla birlikte , şablonda tanımlanan verileri çeşitli HTML yapıları içinde düzenler. Bu, yatay veya dikey düzen seçeneklerini içerir ve ayrıca verilerin akış veya tablo düzeni olarak nasıl tekrarlanacağını ayarlamanıza .

DataList denetimi, verileri düzenlemek için otomatik olarak bir veri kaynağı denetimi kullanmaz. Bunun yerine, bu senaryolar için kendi kodunuzu yazabileceğiniz komut olayları sağlar . Bu olayları etkinleştirmek için, şablonlardan birine bir Düğme denetimi eklersiniz ve düğmenin CommandName özelliğini edit, delete, update veya cancel anahtar sözcüğüne ayarlarsınız. Daha sonra uygun olay DataList denetimi tarafından oluşturulur.

Tekrarlayıcı Kontrolü

Yineleyici denetimi ayrıca özel bağlamayı tanımlamak için şablonlar kullanır. Ancak, verileri ayrı kayıtlar olarak göstermez. Bunun yerine, şablonunuzda belirttiğiniz gibi veri satırlarını tekrarlar. Bu, tek bir veri satırı oluşturmanıza ve sayfanızda tekrar etmenize olanak tanır.

Tekrarlayıcı kontrolü salt okunur bir şablondur. Yani, yalnızca ItemTemplate destekler. Düzenleme, ekleme ve silmeyi dolaylı olarak desteklemez. Bu işleve ihtiyacınız varsa diğer kontrollerden birini düşünmelisiniz, aksi takdirde bunu Tekrarlayıcı kontrolü için kendiniz kodlamanız gerekecektir .


Yukarıdaki Açıklamalar, Microsoft.NET Framework 4 ile MCTS Sınav 70-515 Web Uygulamaları Geliştirme kitabından alınmıştır.

DataGrid bu kitapta bahsedilmemiştir ve yerini popüler GridViews almıştır ve diğer kullanıcılar tarafından güzelce yanıtlanmıştır.


1
Tüm yanıtların harika açıklamaları!
Ali007

Tanrım ... tam bir cevabın tanımı. Aferin.
user3308043

6

Aslında! ASP.NET 4.0 veri araçları arasındaki farklar hakkında blog yazdım . Temel olarak, kılavuz görünümler tablo şeklindeki bilgileri sunmanın en güçlü yoludur, oysa ListView kontrolleri tekrarlanan verilerin daha karmaşık görünümleri içindir. Bir ASP.NET acemisine tavsiye veriyor olsaydım, onlara kılavuz görüntülerini baştan sona öğrenmelerini ve başlamak için diğer kontrolleri görmezden gelmelerini söylerdim.


Sadece kendi bloguma bir yorum eklemek için: 2-3 yıl sonra, aslında tavsiye ettiğim şey ASP.NET MVC'yi öğrenmektir, bu da soruyu alakasız hale getirir (ve ayrıca ızgaralardan olayları yükseltmeyi önemsiz kılar). Ancak, bu UZUN bir öğrenme eğrisidir!
Andy Brown

5

Her şey, verilerinizi nasıl düzenlemek istediğinize bağlı.

Yineleyici veya ListView kullanırken düzeni kontrol etmeniz gerekiyorsa (tablolara karşı CSS'ye karşı tablolar gibi). İkisi arasında ListView size düzenleme, seçme, ekleme için çok daha fazla olay ve yerleşik komutlar sunar. Ek olarak sayfalama ve gruplama işlevi. Tekrarlayıcı son derece basittir, verilerle bir düzeni tekrarlar. Düzeni elle oluşturduğunuz için, Listview ve Repeater daha fazla koda ihtiyaç duyar.

GridView güncellenmiş bir DataGrid olduğundan, DataGrid'i kullanmak için neredeyse hiçbir neden yoktur. GridView, standart ASP.NET veri kaynaklarına bağlandığında gerçekten iyi çalışır, ancak sizi çok sayıda düzen kuralı içeren bir tablo düzeniyle sınırlar. GridView, yerleşik bir düzen kullandığınız için daha az kod gerektirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.