0

我有一个 4 列的 gridview,其中三个是模板字段,用户可以在其中输入所需的信息,然后单击按钮将其提交到数据库。我有两个问题:

  1. 当我单击按钮添加第二行时……第一行帖子中的数据
    消失了。我希望能够添加该行,而不会因多条记录输入情况而第一行信息消失。我的代码如下:

    Private Sub SetInitialRow()
        Dim dts As New DataTable()
        Dim drs As DataRow = Nothing
        dts.Columns.Add(New DataColumn("Approval Date", GetType(String)))
        dts.Columns.Add(New DataColumn("Total Amount", GetType(String)))
        dts.Columns.Add(New DataColumn("Comments", GetType(String)))
        dts.Columns.Add(New DataColumn("Initials", GetType(String)))
        drs = dts.NewRow()
        drs("Approval Date") = String.Empty
        drs("Total Amount") = String.Empty
        drs("Comments") = String.Empty
        drs("Initials") = String.Empty
        dts.Rows.Add(drs)
        ViewState("CurrentTable") = dts
        gvOLIAdj.DataSource = dts
        gvOLIAdj.DataBind()
    End Sub
    
    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.Text
                    dtCurrentTable.Rows(i - 1)("Total Amount") = box2.Text
                    dtCurrentTable.Rows(i - 1)("Comments") = box3.Text
                    '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
    
    Protected Sub btnAddNewRow_Click(sender As Object, e As EventArgs) Handles btnAddNewRow.Click
        AddNewRowToGrid()
    
    End Sub
    
  2. 当我尝试编写一个循环来遍历每个模板字段以获取数据并将其放入我的数据库时,它无法识别我在模板字段中有数据?这是我迄今为止尝试过的无济于事......

    Protected Sub btn_Update_Click(sender As Object, e As EventArgs) Handles btn_Update.Click
        For Each row As GridViewRow In gvOLIAdj.Rows
            For Each gv As GridViewRow In gvOLIAdj.Rows
                Dim appDt As String = (Rows(rowIndex).Cells(1).FindControl("txtAdjAppr")), TextBox)
                Dim approvalDt As String = CType(gv.FindControl("txtAdjAppr"), TextBox).Text
                Dim totalAmt As String = CType(gv.FindControl("txtAdjAmt"), TextBox).Text
                Dim comments As String = CType(gv.FindControl("txtcmmts"), TextBox).Text
                Dim intitials As String = DirectCast(gv.FindControl("total"), TextBox).Text
        Next
    
    End Sub 
    
4

1 回答 1

0

在您的 AddNewRowToGrid 方法中,您正在执行以下操作:

            dtCurrentTable.Rows(i - 1)("Total Amount") = box2.Text
            dtCurrentTable.Rows(i - 1)("Comments") = box3.Text

这里的问题是更新 dtCurrentTable.Rows( i - 1 ) 中的行。您正在更新要更新的值上方的行中的值。

于 2013-06-04T02:34:28.683 回答