动态添加行的asp.net表在回发后不会保留

时间:2011-08-08 18:26:39

标签: .net asp.net

我有一个按钮单击事件,可以向表中添加文本。但是,当我提交表单时,输入到表中的值不会出现在回发中...这可能吗?

这是我的代码:

    Protected Sub AddRowToInputTables(table As Table, value As String)
    If table IsNot Nothing Then
        Dim id As String = value.Trim()
        Dim prefix As String = ""
        If (table.ID = "cust_num") Then ' todo - abstract this out and use a parameter for the prefix instead
            prefix = "CN"
        Else
            prefix = "RN"
        End If
        If id <> String.Empty Then
            Dim tr = New TableRow()
            Dim td = New TableCell()
            Dim td2 = New TableCell()
            Dim btnDelete = New ImageButton()
            btnDelete.ID = "btn" & prefix & "_" & id & "_del"
            btnDelete.ImageUrl = "http://res.xxxxxxxx.net/images/delete.png" ' todo - put this in the web.config or settings file
            tr.ID = id
            td.Text = id
            td2.Controls.Add(btnDelete)
            tr.Cells.Add(td)
            tr.Cells.Add(td2)
            Dim rows = New List(Of TableRow)()
            For Each row In table.Rows
                rows.Add(row)
            Next
            rows.Add(tr)
            table.Rows.Clear()
            table.Rows.AddRange(rows.ToArray())
            cust_num_txt.Value = String.Empty
            res_num_txt.Value = String.Empty
        End If
    End If
End Sub

3 个答案:

答案 0 :(得分:2)

您需要将表提交到ViewState或Session,或者每次回发页面时重新创建表。如果表不是太大,您可以将它放在ViewState中。

将表保存到ViewState:

ViewState["MyTable"] = table;

从ViewState检索表:

table = (DataTable)ViewState["MyTable"];

答案 1 :(得分:0)

Trick是在Load事件中填充表 ...然后一切正常开始。

答案 2 :(得分:0)

我遇到了同样的问题,以下解决方案效果很好:

sub AddRowsToTable()
    session("MyTable") = Nothing
    MyTable.Rows.Clear
    '... Adding rows and cells here ...
end sub


Protected Sub btnRefreshTable_Click(sender As Object, e As ImageClickEventArgs) Handles btnRefreshTable.Click
    AddRowsToTable()
    Session("MyTable") = MyTable
End Sub


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Page.IsPostBack Then
        If Not IsNothing(Session("MyTable")) Then
            AddRowsToTable()
        End If
    End If
End Sub

希望这个帮助