2012-05-11 4 views
0

У меня есть страница asp.net с кнопкой, которая добавляет дополнительную строку в gridview для ввода в базу данных. 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 
+0

У вас есть функция Page_Load? Я подозреваю, что публикация поможет вам получить ответ. –

+0

Да, нагрузка на страницу есть, но это не имеет никакого отношения, они никак не связаны – developthestars

+0

PageLoad может вступить в игру после обратной передачи. –

ответ

0

Я могу думать о двух причинах, почему это может происходить:

  1. При создании элементов управления динамически это очень трудно получить значения в коде позади после постбэка
  2. Элементы управления имеют атрибут «только для чтения», установленный в необработанном HTML

Возможно, вы захотите попробовать старомодные методы, такие как Request.F orm http://msdn.microsoft.com/en-us/library/ms525985%28v=vs.90%29.aspx

Смежные вопросы