Таблица 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
надеюсь, это поможет