У меня есть сценарий, в котором, например, мне нужно повторить список штатов США и отобразить таблицу городов и населения городов после названия каждого штата. Требование к дизайну диктует, что каждое внешнее повторение должно быть названием штата, за которым следует таблица городов, и это требование не может быть изменено в настоящее время. Есть ли недостатки у вложения GridView в ретранслятор с последующей привязкой каждого повторяющегося GridView во время события ItemDataBound ретранслятора? Какие есть альтернативные решения?





Если бы это был я, я бы перевернул вопрос и спросил, почему Я должен использует GridView. Если вам нужен набор встроенных функций, таких как разбиение по страницам и сортировка, то GridView может подойти. Если вам просто нужны табличные данные, я бы пересмотрел. Почему? Поскольку с GridView вы получаете множество вещей, которые не будете использовать, ваше ViewState будет потенциально огромным, а производительность вашей страницы будет медленнее.
Я не фанат, когда дело касается GridView, но я использую их только тогда, когда для этого есть чертовски веская причина.
Если код отстает, я бы добавил в вашу таблицу элементы управления (HtmlTableRow, HtmlTableCell) вместо того, чтобы строить строку и выгружать ее в литерал (если это то, что вы имели в виду). Или используйте HtmlTextWriter. Я не люблю делать презентации в коде программной части, поэтому, если бы это был я, я бы использовал Repeater или ListView.
В приведенном выше сценарии вам было бы лучше создать GridView в стиле основной детали, что избавит вас от накладных расходов на все те объекты GridView, которые создаются.
Существуют различные его реализации (используя раскрывающийся список для мастера, использование модальное всплывающее окно для деталей и т. д.), Но главное, что есть доступные реализации.
К сожалению, требования к дизайну диктуют, что каждое внешнее повторение должно быть названием штата, за которым следует таблица городов. Я отредактировал свой пост, чтобы прояснить этот момент.
По крайней мере, надеюсь, вы сможете отключить ViewState в GridViews.
Лучшее решение, которое мне удалось придумать, - это вложить GridView в Repeater. Затем я связал каждый повторяющийся GridView во время события ItemDataBound Repeater. Я, конечно, отключил их ViewStates, поскольку они не нужны.
Если я откажусь от использования GridView, вы предлагаете мне использовать другой Repeater для создания моего HTML-кода <table> или прокручивать набор данных в коде позади и выводить мои результаты в Literal?