2012-05-04 15 views
0

私は4列のグリッドビューを持っています。そのうちの3つはテンプレートフィールドで、必要な情報を入力してボタンをクリックしてデータベースに送信します。私は2番目の行を追加するために、私のボタンをクリックすると、最初の行の記事でデータ
...gridviewループの問題

  1. 消える:私は2つの問題を抱えています。私は情報の最初の行なしで行を追加することができるようにしたい 複数のレコードの入力状況のために消えている。私のコードは次のとおりです。

    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. 私はテンプレートフィールドのそれぞれを通るループが データを取得し、それは私がデータを持っていることを認識していない私のデータベースにそれを置くためになるループを記述しようとすると、 テンプレートフィールド?これは、あなたがやっているあなたのAddNewRowToGrid方法で

    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 
    
+0

コードを読みやすくするために質問の書式を設定してください。 – PaulG

+0

私はそれを送信し、私が何をやっているのかわからない – developthestars

答えて

0

...私はこれまで無駄にしようとしたものです以下:

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

は何ここで間違っていることは、行の更新ですdtCurrentTable.Rows(i - 1)。更新する行の上の値を更新しています。