Repeater, ListView, DataList, DataGrid, GridView… Что выбрать?


111

Так много разных элементов управления на выбор! Каковы лучшие практики для определения того, какой элемент управления использовать для отображения данных в ASP.NET?


2
На этот вопрос есть только один окончательный ответ: это зависит от обстоятельств. Что ты пытаешься сделать?
Tomalak

@Tomalak Я просто показываю список данных ... обычно я просто использую Repeater, но хочу увидеть плюсы / минусы использования других.
mattruma

Ответы:


144

Это действительно о том, чего вы пытаетесь достичь

  • Gridview - ограниченный дизайн, работает как таблица html. Больше встроенных функций, таких как редактирование / обновление, страница, сортировка. Много накладных расходов.

  • DataGrid - старая версия Gridview. Gridview - это супер-сетка данных.

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

  • ListView - новый даталист :). Почти гибрид datalist и gridview, где вы можете использовать разбиение по страницам и строить в Gridview, как функциональные возможности, но при этом сохраняете свободу дизайна. Один из новых элементов управления в этом семействе

  • Повторитель - очень легкий. Нет встроенных функций, таких как верхние и нижние колонтитулы. Имеет наименьшие накладные расходы.


12
Этот ответ еще актуален? (так как это с 2008 по 2013 год)
Мишель Эйрес

3
@Michel Repeater стал строго типизированным, начиная с .NET 4.5. Мне это очень нравится.
Евгений Набоков

1
@MichelAyres Я бы сказал, да, в целом. Хотя MS внесла некоторые обновления в веб-формы с 2008 года, общие идеи, изложенные в ответе, остались прежними.
akousmata

2
Хммм .. "Никаких встроенных функций, таких как верхние и нижние колонтитулы", ну, есть HeaderTemplate и FooterTemplate ... если вы хотите вставить такие вещи, как ваши теги <table> и </table>.
Реклама

28

Все остальные попали в него: это зависит.

Теперь для некоторых конкретных рекомендаций (расширяя отличный ответ WebDude выше) ...

Подходит ли ваш дизайн к естественному просмотру данных в виде электронной таблицы или сетки? Вид сетки .

Вам нужно отображать список или другое форматированное представление данных, возможно, с верхними и нижними колонтитулами и, возможно, с определенными элементами управления и / или форматированием для каждой записи данных? (EG, индивидуальные ссылки, возможно , LinkButtons или конкретные элементы редактирования?) Имеет ли этот дисплей специально не вписывается в электронной таблице или сетки зрение? Посмотреть список

Если вы соответствуете всем критериям ListView, но, естественно, вписываетесь в сетку, вы можете рассмотреть DataList .

Я выбираю Repeater, когда мне просто нужны некоторые базовые данные, повторяемые с помощью некоторых элементов индивидуального дизайна, без заголовков и нижних колонтитулов, красиво и чисто.


19

Просмотр разметки

Объявление следующего образца кода возможно для всех 3 (ListView, DataList, Repeater)

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

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

ListView (обратите внимание на редактирование, группу, вставку, макет)

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

DataList (обратите внимание на пары стилей)

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

Повторитель

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

Просмотр кода (расширенный вид)

CompositeDataBoundControl :

посмотрите следующую иерархию классов (и связанные элементы управления).

эти элементы управления содержат другие элементы управления asp.net в своих шаблонах для отображения связанных данных для пользователя

Классы CompositeDataBoundControl (и связанные элементы управления)

Некоторые описания для лучшего понимания

Элемент управления ListView

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

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

Элемент управления DataList

Элемент управления DataList работает как элемент управления Repeater . Он повторяет данные для каждой строки в вашем наборе данных и отображает эти данные в соответствии с вашим заданным шаблоном. Тем не менее , он размещает данные, определенные в шаблоне, в различных структурах HTML. Это включает в себя варианты горизонтального или вертикального макета, а также позволяет вам установить, как данные должны повторяться, как поток или макет таблицы.

Элемент управления DataList не использует автоматически элемент управления источником данных для редактирования данных. Вместо этого он предоставляет командные события, в которых вы можете написать свой собственный код для этих сценариев. Чтобы включить эти события, вы добавляете элемент управления Button в один из шаблонов и устанавливаете для свойства CommandName кнопки ключевое слово edit, delete, update или cancel. Соответствующее событие затем вызывается элементом управления DataList.

Управление ретранслятором

Элемент управления Repeater также использует шаблоны для определения настраиваемой привязки. Однако он не отображает данные как отдельные записи. Вместо этого он повторяет строки данных, как вы указываете в шаблоне. Это позволяет вам создать одну строку данных и повторить ее на всей странице.

Элемент управления Repeater предназначен только для чтения . То есть он поддерживает только ItemTemplate. Он неявно не поддерживает редактирование, вставку и удаление. Вам следует рассмотреть один из других элементов управления, если вам нужна эта функция, иначе вам придется самостоятельно кодировать его для элемента управления Repeater.


Приведенные выше описания взяты из книги MCTS Exam 70-515 «Разработка веб-приложений с использованием Microsoft.NET Framework 4» .

DataGrid даже не упоминается в этой книге и заменен популярными GridView, и на него хорошо отвечают другие пользователи.


1
Отличные описания всех ответов!
Ali007

Боже мой ... определение полного ответа. Отлично сработано.
user3308043

6

На самом деле! Я писал в блоге о различиях между инструментами данных ASP.NET 4.0 . По сути, gridviews - это наиболее эффективный способ представления табличной информации, тогда как элементы управления ListView предназначены для более сложных отображений повторяющихся данных. Если бы я давал совет новичку в ASP.NET, я бы посоветовал им выучить gridviews наизнанку и с самого начала игнорировать другие элементы управления.


Просто чтобы добавить комментарий к моему собственному блогу: через 2-3 года я бы рекомендовал вместо этого изучить ASP.NET MVC, что делает вопрос неактуальным (а также делает тривиальным создание событий из сеток). Однако это ДОЛГОЙ процесс обучения!
Энди Браун

5

Все сводится к тому, как вы хотите разместить свои данные.

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.