https://docs.microsoft.com/it-it/dot...ramework-4.7.2
Nella documentazione è scritto che:
È importante ricordare che qualsiasi aggiunta a livello di codice o la modifica di righe della tabella o le celle non vengono mantenute tra gli invii al server. Infatti, le righe della tabella e le celle sono controlli i propri e non alle proprietà del Table controllo. Per rendere persistenti le modifiche alla tabella, righe e celle devono essere ricostruite dopo ogni postback. Infatti, se sono previsti modifiche sostanziali, è consigliabile che una DataList, DataGrid, o GridView controllo utilizzare invece del Table controllo. Di conseguenza, il Table classe viene usata principalmente dagli sviluppatori di controlli.
quella di sotto una possibile implementazione
codice:
<asp:Button ID="Button1" runat="server" Text="Aggiungi riga" />
<asp:Button ID="Button2" runat="server" Text="Refresh" />
<br /><br />
<asp:Table ID="Table1" runat="server">
</asp:Table>
codice:
Partial Class prove_a
Inherits System.Web.UI.Page
'rappresenta le righe della tabella
Private rs As Righe = Nothing
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
'---------------------------------------------------------------------------------------------------------------
'Per rendere persistenti le modifiche alla tabella, righe e celle devono essere ricostruite dopo ogni postback.
'---------------------------------------------------------------------------------------------------------------
'recupero le righe salvate nel viewstate
Dim jrs As Object = Me.ViewState("righe")
If jrs Is Nothing Then
rs = New Righe()
Else
rs = DirectCast(jrs, Righe)
End If
'e aggiorno la tabella coi vecchi dati
For Each r As Riga In rs
Dim tr As New TableRow()
Dim tc As New TableCell()
tc.Controls.Add(New LiteralControl(r.Data.ToString))
tr.Cells.Add(tc)
Me.Table1.Rows.Add(tr)
Next
End Sub
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
'salvo nel viewstate le righe della tabella con la nuova riga
Dim Adesso As DateTime = DateTime.Now
rs.Add(New Riga(Adesso))
Me.ViewState("righe") = rs
'inserisco la riga nella tabella
Dim tr As New TableRow()
Dim tc As New TableCell()
tc.Controls.Add(New LiteralControl(Adesso.ToString))
tr.Cells.Add(tc)
Me.Table1.Rows.Add(tr)
End Sub
'------------------------------------------------------------------------
'definisco la classe serializzabile Riga, che contiene la proprietà data
'------------------------------------------------------------------------
<Serializable()>
Private Class Riga
Public Property Data As DateTime
Public Sub New(data As DateTime)
Me.Data = data
End Sub
End Class
'------------------------------------------------------------------------
'Definisco la classe serializzabile Righe ereditata da List(Of Riga)
'------------------------------------------------------------------------
<Serializable()>
Private Class Righe : Inherits List(Of Riga)
End Class
End Class