В настоящее время я создаю Gridview с расширяемыми строками. Каждая строка содержит динамически создаваемую панель элементов формы. Прямо сейчас у меня есть функция javascript, которая расширяет (или, в моем случае, делает видимой) панель при щелчке изображения в строке Gridview.
У меня вопрос ... есть ли более эффективный способ сделать это. Вместо того, чтобы извлекать все мои данные для начала и строить каждую новую строку, когда я привязываю данные, есть ли способ просто создать строку с панелью, полной текстовых полей и раскрывающихся списков, на лету, когда пользователь нажимает кнопку «Развернуть»? "
Я хотел бы ограничить вызовы сервера, сделав это таким образом, вместо того, как я это делаю сейчас, перебирая каждую строку и создавая новую панель с элементами формы и вставляя ее в скрытую строку.





Попытка создать данные на лету лично, скорее всего, приведет к замедлению взаимодействия с пользователем.
Когда я делаю такие вещи, как то, что вы описываете, я обычно использую повторители, таким образом я могу создать макет шаблона, который просто сразу определяет все необходимые элементы и обрабатывает действия привязки.
В противном случае, я бы предположил, что ваш путь не так уж и медленен.
На самом деле, он работает неплохо, поскольку мой исходный SQL-запрос может заполнять каждую строку, и я включил разбиение на страницы в Gridview. Мне просто интересно, могут ли они быть созданы на лету с использованием PageMethods или какого-то решения JSON / AJAX. Я ничего не видел, но ... стоит попробовать поискать.
вы можете переопределить событие RowdataBound, а затем добавить любые элементы управления, которые вы хотите, в зависимости от того, какие данные входят в ячейку.
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx
На самом деле недавно это сработало в обработчике AJAX, возвращающем структуру формы. Это по запросу и хорошо работает. Просто вызовите $ ajax через jQuery, верните структуру HTML и вставьте в DIV. Это немного ограничивает фактическую функциональность, поэтому будьте осторожны.