【问题标题】:asp.net table adding rows dynamically don't remain after postback回发后动态添加行的asp.net表不会保留
【发布时间】:2011-08-08 18:26:39
【问题描述】:

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

这是我的代码:

    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

【问题讨论】:

  • 必须在每次回发时重新创建动态数据。

标签: .net asp.net


【解决方案1】:

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

将表格保存到 ViewState:

ViewState["MyTable"] = table;

从 ViewState 中检索表:

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

【讨论】:

  • 不太大...最多只能有 20 件物品...谢谢您的提示,将尝试并返回!
【解决方案2】:

诀窍是在 Load 事件中填充表格...然后一切开始正常工作。

【讨论】:

    【解决方案3】:

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

    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
    

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-15
      • 2012-03-17
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多