Я мог бы что-то здесь упустить, но я все равно пойду на это. Вы должны создать иерархию элементов управления, аналогичную той, что была в исходном рендеринге, чтобы идентификаторы соответствовали и позволяли вашим событиям срабатывать должным образом. Похоже, вам нужно сделать некоторые изменения порядка после возникновения события, поэтому вам нужно будет создать элементы управления дважды.
Edit:
Вы должны быть в состоянии воссоздать свои элементы управления и иерархию элементов управления после отправки. Вы должны отправить достаточно информации клиенту, чтобы вы могли правильно воссоздать элементы управления в Postback. Это можно сделать, сохранив информацию в ViewState, если необходимо.
Вы должны пересчитывать контрольную информацию только тогда, когда это требуется. В вашем случае из-за какого-то постбэка.
Основной поток должен быть таким. В событии Load, если у вас нет ViewState, необходимого для создания элементов управления, вызовите метод populate, в противном случае создайте их из ViewState. Когда происходит обратная запись, событие Load создает их, но они восстанавливаются из состояния просмотра, поэтому это должно быть дешево. Когда происходит событие post back, вызовите метод populate, чтобы воссоздать элементы управления в новом порядке или с новой информацией, в зависимости от того, какое событие произошло.
Всякий раз, когда я создаю элемент управления, мне нравится думать о том, как будет вести себя элемент управления, если отправка сообщения происходит из какого-либо другого элемента управления на странице. Ваш элемент управления должен продолжать выглядеть так же, если на него не повлияло это сообщение, и он должен быть в состоянии воссоздать, не делая никакого доступа к данным, но исходя из информации, которую он собрал во время предыдущих вызовов.
Я отредактировал свой ответ, и, надеюсь, теперь он стал немного понятнее.