0

データベースへの入力用にグリッドビューに追加の行を追加するボタンのあるasp.netページがあります。グリッドビューは 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
4

1 に答える 1

0

これが発生する理由として、次の 2 つが考えられます。

  1. コントロールを動的に作成する場合、ポストバック後にコード ビハインドで値を取得するのは非常に困難です。
  2. コントロールには、未加工の HTML で読み取り専用属性が設定されています

Request.Form http://msdn.microsoft.com/en-us/library/ms525985%28v=vs.90%29.aspxなどの昔ながらの方法を試すこともできます。

于 2012-05-11T23:09:26.190 に答える