【问题标题】:Textbox values disappear on postback文本框值在回发时消失
【发布时间】:2012-05-11 20:24:29
【问题描述】:

我有一个带有按钮的 asp.net 页面,该按钮向 gridview 添加额外的行以输入数据库。网格视图由 3 个文本框(模板字段)组成,当我添加一行时,已经输入的信息会以某种方式在回发中消失。我希望按钮添加其他行而不消除其他行中的数据,直到我点击提交按钮。这是我的代码

Private Sub AddNewRowToGrid()
    Dim rowIndex As Integer = 0
    If ViewState("CurrentTable") IsNot Nothing Then
        Dim dtCurrentTable As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
        Dim drCurrentRow As DataRow = Nothing
        If dtCurrentTable.Rows.Count > 0 Then
            For i As Integer = 1 To dtCurrentTable.Rows.Count
                'extract the TextBox values
                Dim box1 As TextBox = DirectCast(gvOLIAdj.Rows(rowIndex).Cells(1).FindControl("txtAdjAppr"), TextBox)
                Dim box2 As TextBox = DirectCast(gvOLIAdj.Rows(rowIndex).Cells(2).FindControl("txtAdjAmt"), TextBox)
                Dim box3 As TextBox = DirectCast(gvOLIAdj.Rows(rowIndex).Cells(3).FindControl("txtCmmts"), TextBox)
                drCurrentRow = dtCurrentTable.NewRow()
                drCurrentRow("Approval Date") = box1.ToString
                dtCurrentTable.Rows(i - 1)("Total Amount") = box2.ToString
                dtCurrentTable.Rows(i - 1)("Comments") = box3.ToString
                'dtCurrentTable.Rows(i - 1)("Initials") = 
                rowIndex += 1
            Next
            dtCurrentTable.Rows.Add(drCurrentRow)
            ViewState("CurrentTable") = dtCurrentTable
            gvOLIAdj.DataSource = dtCurrentTable
            gvOLIAdj.DataBind()
        End If
    Else
        Response.Write("ViewState is null")
    End If
    'Set Previous Data on Postbacks
    'SetPreviousData()
End Sub

Private Sub SetPreviousData()
    Dim rowIndex As Integer = 0
    If ViewState("CurrentTable") IsNot Nothing Then
        Dim dats As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
        If dats.Rows.Count > 0 Then
            For i As Integer = 0 To dats.Rows.Count - 1
                Dim box1 As TextBox = DirectCast(gvOLIAdj.Rows(rowIndex).Cells(1).FindControl("txtAdjAppr"), TextBox)
                Dim box2 As TextBox = DirectCast(gvOLIAdj.Rows(rowIndex).Cells(2).FindControl("txtAdjAmt"), TextBox)
                Dim box3 As TextBox = DirectCast(gvOLIAdj.Rows(rowIndex).Cells(3).FindControl("txtCmmts"), TextBox)
                box1.Text = dats.Rows(i)("Approval Date").ToString()
                box2.Text = dats.Rows(i)("Total Amount").ToString()
                box3.Text = dats.Rows(i)("Comments").ToString()
                rowIndex += 1
            Next
        End If
    End If
End Sub

【问题讨论】:

  • 你有Page_Load函数吗?我怀疑,发布这将帮助您获得答案。
  • 是的,页面加载在那里,但与此无关,它们没有以任何方式连接
  • PageLoad 可以在回发时发挥作用。
  • 你能详细说明一下吗?你有解决方案吗?当我调试它甚至没有点击页面加载所以我不确定你的意思
  • 每次刷新页面时都会触发 Page_Load 事件。

标签: asp.net vb.net gridview


【解决方案1】:

我能想到这可能发生的两个原因:

  1. 动态创建控件时,很难 回发后检索后面代码中的值
  2. 您的控件在原始 HTML 中设置了只读属性

您可能想尝试老式的方法,例如 Request.Form http://msdn.microsoft.com/en-us/library/ms525985%28v=vs.90%29.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多