Нижняя строка: привязать к DataReaders
, использовать Repeaters
вместо GridViews
и выключить ViewState
.
Дизайн, который вы предлагаете, будет довольно сложным для ваших пользователей (тысячи записей, yikes), но вы, вероятно, уже знаете это.
Если это только для отображения и вам нужна абсолютно быстрая архитектура для Asp.Net, вы должны получить IDataReader
для каждого сегмента данных (основного и дочернего), отсортированного так, чтобы вы могли вручную сопоставлять дочерние записи при чтении обоих наборы результатов только в прямом направлении. (См. Скотт Митчелл Почему я не использую DataSets в своих приложениях ASP.NET , чтобы узнать подробности о производительности DataReader
- если вы не оптимизируете преждевременно , это довольно хороший совет.)
Вместо использования GridView
, я бы использовал Repeater
, который имеет меньше накладных расходов и позволяет писать более компактный HTML (для меньшей полезной нагрузки для клиента): привязать мастер IDataReader
к этому повторителю. (Я не уверен, что вы имели в виду элемент управления GridView
или просто концептуальную сетку - базовая архитектура была бы такой же для GridView
)
Затем добавьте обработчик к Repeater.ItemDataBound
, который проверяет, совпадает ли текущая запись считывателя дочерних данных. Если это так, вручную визуализируйте ваши подробные данные для этой основной записи.
Наконец, вам также следует отключить ViewState
, по крайней мере, для Repeater
(желательно для максимально возможной части страницы), чтобы, таким образом, полезная нагрузка HTML была меньше.
Если вы полностью привержены вложенным GridView
с, особенно при использовании GridView
для рендеринга подробных данных, это так или иначе повредит производительности, потому что вам придется либо сделать гораздо больше вызовы базы данных (для получения дискретных наборов результатов, к которым вы можете привязаться), или вам придется втирать подробные данные в промежуточный контейнер.