Allora, visto che HO mangiato posso scrivere un po' di codice :

Il controllo è questo (non ha una classe da cui eredita, quindi niente proprietà pubbliche, e non lo lo registro con TagPrefix...lo carico solo con LoadControl) :

codice:
 
<%@ Control Language="vb" AutoEventWireup="false" %>
<tr>
 <td height=10px colspan=8></td>
</tr>
<tr>
<td align="left" width=13%>
 <font class="labels_small">Cod.Art:</font>
</td>
<td align="left" width=13%>
 <asp:textbox id="tbcodart" runat="server" CssClass="boxdocumenti" />
</td>
</tr>
.
.
.


Questo è il pezzo di codice con il placeholder che viene riempito di controlli ascx :

codice:
						<TABLE cellSpacing="1" cellPadding="1" width="100%" align="center" border="0">
						    <asp:placeholder id="phrigaordine" runat="server"></asp:placeholder>
						</TABLE>

Questo è il codice "a freddo" (nel Page_Load) che carica il primo ascx e lo piazza nel placeholder (e per ora mette il controllo in un hashtable con chiave il numero di riga):

codice:
            ' ==============================
            ' CARICA LA PRIMA RIGA ORDINE...
            ' ==============================
            If Not IsPostBack Then
                If phrigaordine.Controls.Count = 0 Then
                    Dim ctlrigheord As Control = LoadControl("controls/ctrRigaOrdine.ascx")
                    phrigaordine.Controls.Add(ctlrigheord)
                    lbrighe.Text = "- Righe: <font color=red>" & phrigaordine.Controls.Count & "</font>"
                    Session("numerorighe") = 0
                    ListaASCX.Add(Convert.ToString(Session("numerorighe")), ctlrigheord)
                    Session("hash") = ListaASCX
                End If
            End If

ed ecco le due Sub che Aggiungono e Tolgono le righe (la seconda le toglie tutte per ora):

codice:
 
    Public Sub AddRow(ByVal Src As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
        ' Carica i vecchi...
        ListaASCX = DirectCast(Session("hash"), Hashtable)
        Dim Chiave As String = ""
        For Each Chiave In ListaASCX.Keys
            Response.Write(Chiave)
            phrigaordine.Controls.Add(CType(ListaASCX(Chiave), Control))
        Next

        ' Ne aggiunge uno
        Dim ctlrigheord As Control = LoadControl("controls/ctrRigaOrdine.ascx")
        phrigaordine.Controls.Add(CType(ListaASCX(Chiave), Control))

        Session("numerorighe") = CInt(Session("numerorighe")) + 1
        ListaASCX.Add(Convert.ToString(Session("numerorighe")), ctlrigheord)
        Session("hash") = ListaASCX
        lbrighe.Text = "- Righe: <font color=red>" & ListaASCX.Count & "</font>"
    End Sub



    Public Sub ClearRows(ByVal Src As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
        Dim ht As Hashtable = CType(Session("hash"), Hashtable)
        Dim numerocontrolli As Integer = ht.Count

        If phrigaordine.HasControls Then
            phrigaordine.Controls.Clear()
        End If
        Tools.MessageBox(Me, "Rimosse " & numerocontrolli & " righe.")
        lbrighe.Text = "- Righe: <font color=red>0</font>"
    End Sub

E funziona (quasi).
Pero' ci sono due problemi :
1 - Non mantiene i valori scritti nelle precedenti righe (problema grosso, che forse mi obbligherà ad optare per una soluzione completamente diversa..)
2 - Se rimuovo TUTTE le righe (con phrigaordine.Controls.Clear)
aggiungendone poi una le rimette tutte !!! VVoVe:

ora provo ad implementare l'esempio che mi hai dato tu di Apogeo..