Visto che mi sto divertendo a smanettare, ho trovato che per fare questo è necessario solamente conservare traccia del numero di controlli inseriti.
Nell'UC, che ha un TextBox, voglio mantenere lo stato. Perciò aggiungo questa proprietà pubblica:
codice:
Public ReadOnly Property TextName$()
Get
Return Me.TextBox1.UniqueID
End Get
End Property
La pagina ospitante ha il codice:
codice:
Private n_righe% = 0
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Inserire qui il codice utente necessario per inizializzare la pagina
Dim o As Object = Me.ViewState("n_righe")
If o Is Nothing Then
n_righe = 0
Else
n_righe = CInt(o)
End If
For i As Integer = 1 To n_righe
Dim uc As UCriga = DirectCast(LoadControl("UCriga.ascx"), UCriga)
uc.Testo = Trim(Me.Request.Form(uc.TextName))
Me.PlaceHolder1.Controls.Add(uc)
Next
End Sub
Private Sub AggiungiRiga(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim uc As UCriga = DirectCast(LoadControl("UCriga.ascx"), UCriga)
n_righe += 1
Me.ViewState("n_righe") = n_righe
Me.PlaceHolder1.Controls.Add(uc)
End Sub
Private Sub TogliRiga(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If n_righe = 0 Then Exit Sub
n_righe -= 1
Me.ViewState("n_righe") = n_righe
Me.PlaceHolder1.Controls.RemoveAt(n_righe)
End Sub