Таблица 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 ответа

Решение

Хитрость заключается в заполнении таблицы только в событии Load... тогда все стало работать нормально.

Вам нужно будет либо зафиксировать таблицу в ViewState или Session, либо пересоздавать таблицу каждый раз, когда страница отправляется обратно. Если таблица не слишком большая, вы можете просто выбросить ее в ViewState.

Чтобы сохранить таблицу в ViewState:

ViewState["MyTable"] = table;

Чтобы извлечь таблицу из ViewState:

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

У меня была та же проблема, и следующее решение работало хорошо:

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

надеюсь, это поможет

Другие вопросы по тегам