Если вы динамически добавляете элементы управления, то при каждой обратной передаче вам нужно снова добавлять элементы управления.
попробуйте использовать if (Not IsPostBack) или (IsPostBack) вместо сравнения с Nothing.
Здесь я просто добавляю текстовое поле динамически при обратной передаче, и оно останется при каждой обратной передаче.
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (IsPostBack) Then
Dim t As TextBox = New TextBox()
form1.Controls.Add(t)
End If
End Sub
Конечный класс
Вы можете поместить элементы управления, которые вы пытаетесь динамически добавить, в одну функцию / метод / подпрограмму и просто вызывать внутри Load.
Обновление
Если вы хотите, чтобы ваши данные оставались в элементах управления, вы должны сохранить данные в состоянии просмотра. Вы должны будете снова создать элемент управления, независимо от того, что, но до того, как элемент управления будет отправлен обратно пользователю, получите свои данные из состояния просмотра. Это описано с примером здесь.
http://forums.asp.net/t/1186195.aspx/1