У меня была похожая проблема. Я думаю, что проблема заключается в том, что динамически созданные элементы управления не сохраняются в состоянии просмотра и не переносят обратную передачу. Вот комментарий, скопированный из моего кода, который описывает решение, которое я придумал (возможно, оно не единственное, но у меня это сработало).
Эта страница используется для динамического определения сетки. Пользователь нажимает флажки
указать, какие поля включить в сетку. Логика этой страницы делает
две важные вещи:
(1) Он поддерживает объект GridDefinition, который хранится в ViewState.
(2) Он реконструирует программно добавленные элементы управления (по существу, все
в объекте таблицы) из GridDefinition в ViewState при каждой обратной передаче.
Динамически добавленные элементы управления НЕ воссоздаются при обратной передаче из ViewState.
Действительно, я обнаружил, что если вы не создадите заново элементы управления, их события не сработают.
По-видимому:
"The process that matches controls to posted values occurs
after page_load completes, so it has to occur just like this
if you are to use this way."
Когда я получаю контрольное событие, указывающее на некоторые изменения в данных, я должен отразить
это изменение в объекте GridDefinition, хранящемся в ViewState. Таким образом, на СЛЕДУЮЩЕМ
После обратной передачи элемент управления может быть воссоздан должным образом (например, текстовое поле, указывающее
текст заголовка для столбца сетки).