Повторювач, ListView, DataList, DataGrid, GridView… Який вибрати?


111

Стільки різних елементів управління на вибір! Які найкращі практики визначити, який елемент управління використовувати для відображення даних у ASP.NET?


2
На це питання є лише одна остаточна відповідь: Це залежить. Що ви намагаєтесь зробити?
Томалак

@Tomalak Я просто показую список даних ... зазвичай я просто використовую повторювач, але хочу побачити плюси та мінуси використання інших.
mattruma

Відповіді:


144

Це дійсно про те, чого ви намагаєтесь досягти

  • Gridview - обмежений у дизайні, працює як HTML-таблиця. Більше про такі вбудовані функції, як редагування / оновлення, сторінка, сортування. Багато накладних витрат.

  • DataGrid - стара версія Gridview. Перегляд сітки - це суперсетка даних.

  • Datalist - більш настроювана версія Gridview. Також має деякі накладні витрати. Більше ручної роботи, як вам доведеться її самостійно спроектувати.

  • ListView - новий Datalist :). Майже гібрид даталістичного та сіткового перегляду, де ви можете використовувати підкачку та створювати Gridview як функціональні можливості, але маєте свободу дизайну. Один з нових елементів управління в цій родині

  • Повторювач - Дуже легкий вага. Немає таких функцій, як Headers, Footers. Має найменші накладні витрати.


12
Чи все ще актуальна ця відповідь? (оскільки це з 2008 року і це 2013 рік)
Мішель Айрес

3
@Michel Repeater набув сильного набору з .NET 4.5. Мені це дуже подобається.
Євген Набоков

1
@MichelAyres Я б сказав, так, загалом. У той час як MS вносить деякі оновлення веб-форм з 2008 року, загальні ідеї, які висловлюються у відповіді, однакові.
akousmata

2
Хммм .. "Немає таких функцій, як заголовки, колонтитули", ну, є HeaderTemplate та FooterTemplate .., якщо ви хочете розмістити такі речі, як ваші теги <table> та </table>.
Оголошення

28

Вдарили всі інші: це залежить.

Тепер для конкретних вказівок (розширення на відмінну відповідь WebDude вище) ...

Чи вписується ваш дизайн у вигляд даних із природними таблицями чи сіткою? GridView .

Чи потрібно відображати список чи інший формат перегляду даних, можливо, із заголовками та колонтитулами та, ймовірно, із специфічними елементами управління та / або форматуванням для кожного запису даних? (EG, індивідуальні посилання, можливо , LinkButtons або конкретні елементи редагування?) Чи має цей дисплей спеціально НЕ вписується в електронній таблиці або сітки зір? ListView

Якщо ви відповідають усім критеріям ListView, але ви, природно, помістилися в сітці, ви можете розглянути DataList .

Я переходжу на Repeater, коли мені просто потрібні деякі основні дані, повторені деякими бітами на замовлення, без заголовків, без колонтитулів, приємних та чистих.


19

Перегляд розмітки

Декларація наступного зразкового коду можлива для всіх 3 (ListView, DataList, Repeater)

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

у наступних списках Ви можете побачити доступні шаблони та параметри для кожного з них та побачити відмінності для себе

ListView (зверніть увагу на редагування, групу, вставку, макет)

  • Чергування шаблону шаблону
  • EditltemTemplate
  • EmptyDataTemplate
  • EmptyltemTemplate
  • Шаблон GroupSeparatorTemplate
  • GroupTemplate
  • lnsertltemTemplate
  • ItemSeparatorTemplate
  • ItemTemplate
  • LayoutTemplate
  • Вибраний шаблон шаблону

DataList (зверніть увагу на пари стилів)

  • Чергуючийтем
  • Чергування шаблону шаблону
  • EditltemStyle
  • EditltemTemplate
  • FooterStyle
  • FooterTemplate
  • HeaderStyle
  • Шаблон заголовка
  • ItemStyle
  • ItemTemplate
  • Вибраний штемпельний стиль
  • Вибраний шаблон шаблону
  • SeparatorStyle
  • Шаблон SeparatorTemplate

Повторювач

  • Чергування шаблону шаблону
  • FooterTemplate
  • Шаблон заголовка
  • ItemTemplate
  • Шаблон SeparatorTemplate

Перегляд коду (розширений вигляд)

CompositeDataBoundControl :

дивіться наступні ієрархії класів (та пов'язані з ними елементи управління).

ці елементи керують іншими елементами управління asp.net у своїх шаблонах для відображення користувачем даних зв'язаних даних

Класи CompositeDataBoundControl (та пов'язані з ними елементи управління)

Деякі описи для кращих роз'яснень

Управління ListView

Контроль ListView також використовує шаблони для відображення даних. Однак він підтримує безліч додаткових шаблонів, що дозволяють отримати більше сценаріїв під час роботи з вашими даними. Ці шаблони включають шаблон LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

Контроль ListView ( на відміну від DataList та Repeater ) також неявно підтримує можливість редагування, вставки та видалення даних за допомогою керування джерелом даних. Ви можете визначити окремі шаблони для кожного з цих сценаріїв.

Управління DataList

Елемент керування DataList працює як контроль повторювача . Він повторює дані для кожного рядка у вашому наборі даних і відображає ці дані відповідно до визначеного шаблону. Однак він викладає дані, визначені в шаблоні, в межах різних структур HTML. Сюди входять опції для горизонтального чи вертикального макета, а також ви можете встановити, як слід повторювати дані, як макет потоку чи таблиці.

Елемент керування DataList автоматично не використовує елемент керування джерелом даних для редагування даних. Натомість він пропонує командні події, в яких ви можете написати власний код для цих сценаріїв. Щоб увімкнути ці події, ви додасте управління кнопок до одного із шаблонів і встановіть властивість кнопки CommandName на ключове слово редагування, видалення, оновлення чи скасування. Потім відповідна подія піднімається контролем DataList.

Повторне управління

Елемент керування Repeater також використовує шаблони для визначення користувацьких прив'язок. Однак дані не відображаються як окремі записи. Натомість він повторює рядки даних, як ви вказуєте у своєму шаблоні. Це дозволяє створити один рядок даних і повторити їх на всій сторінці.

Елемент керування повтором - це шаблон, доступний лише для читання . Тобто він підтримує лише ItemTemplate. Він не підтримує неявно редагування, вставлення та видалення. Якщо вам потрібна ця функція, слід розглянути один з інших елементів керування, інакше вам доведеться самостійно кодувати це для керування повтором.


Вищеописані описи - з розробки веб-додатків MCTS Exam 70-515 за допомогою книги Microsoft.NET Framework 4 .

DataGrid навіть не згадується в цій книзі, його замінюють популярні GridViews та чудово відповідають інші користувачі


1
Чудові описи всіх відповідей!
Ali007

Боже мій ... визначення повної відповіді. Молодці.
user3308043

6

Справді! Я обговорював відмінності між інструментами даних ASP.NET 4.0 . В основному, перегляд сітки - це найпотужніший спосіб подання табличної інформації, тоді як елементи ListView призначені для більш складних відображень повторних даних. Якщо я давав пораду новачкам ASP.NET, я б сказав їм вивчити перегляди сітки зсередини і проігнорувати інші елементи управління для початку.


Просто для додання коментаря до мого власного блогу: 2-3 роки вниз, те, що я насправді рекомендую, - це навчитися замість цього ASP.NET MVC, що робить це питання нерелевантним (а також робить підвищення подій із сіток тривіальним). Однак це - ДОВГА крива навчання!
Енді Браун

5

Все зводиться до того, як ви хочете розмістити свої дані.

Якщо вам потрібно контролювати макет (наприклад, таблиці проти CSS проти будь-якого), використовуйте повторювач або ListView. Між ними, ListView дає набагато більше подій та вбудованих команд для редагування, вибору, вставки. Додатково функціонування підкачки та групування. Повторювач надзвичайно простий, він повторює макет із даними. Оскільки ви будуєте макет вручну, Listview і Repeater потребують більше коду.

GridView - це оновлений DataGrid, тому навряд чи є причина використовувати DataGrid. GridView дуже добре працює при підключенні до стандартних джерел даних ASP.NET, але обмежує вас в табличному макеті з великою кількістю правил компонування. GridView вимагає менше коду, оскільки ви використовуєте вбудований макет.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.