Ошибка при вставке новой строки в gridview - PullRequest
0 голосов
/ 18 августа 2010

Я пытаюсь добавить новую строку в сетку, но по какой-то причине у меня проблема в цикле for.

Непосредственно переходит к dtCurrentTable.Rows.Add (drCurrentRow) и, конечно, есть ошибка "аргумент 'row' не может быть нулевым. Имя параметра: строка" , поскольку dtcurrentTable.NewRow не было выполнено.

Почему это происходит?

 Private Sub AddNewRowToGrid()
    Dim rowIndex As Integer = 0
    If Not IsNothing(ViewState("CurrentTable")) Then

        Dim dtCurrentTable As DataTable = CType(ViewState("CurrentTable"), DataTable)
        Dim drCurrentRow As DataRow = Nothing

        If dtCurrentTable.Rows.Count > 0 Then
            For i as Integer = 1 To i <= dtCurrentTable.Rows.Count
                ' Extraem-se os valores das Textbox
                Dim box1 As TextBox = Dados.Rows(rowIndex).Cells(0).FindControl("Artigo")
                Dim box2 As TextBox = Dados.Rows(rowIndex).Cells(1).FindControl("Descricao")
                Dim box3 As TextBox = Dados.Rows(rowIndex).Cells(2).FindControl("IVA")
                Dim box4 As TextBox = Dados.Rows(rowIndex).Cells(3).FindControl("PU")
                Dim box5 As TextBox = Dados.Rows(rowIndex).Cells(4).FindControl("Desconto")
                Dim box6 As TextBox = Dados.Rows(rowIndex).Cells(5).FindControl("UN")
                Dim box7 As TextBox = Dados.Rows(rowIndex).Cells(6).FindControl("Quantidade")
                Dim box8 As TextBox = Dados.Rows(rowIndex).Cells(7).FindControl("TotalLiquido")

                drCurrentRow = dtCurrentTable.NewRow

                dtCurrentTable.Rows(i - 1)("Artigo") = box1.Text
                dtCurrentTable.Rows(i - 1)("Descricao") = box2.Text
                dtCurrentTable.Rows(i - 1)("IVA") = box3.Text
                dtCurrentTable.Rows(i - 1)("PU") = box4.Text
                dtCurrentTable.Rows(i - 1)("Desconto") = box5.Text
                dtCurrentTable.Rows(i - 1)("UN") = box6.Text
                dtCurrentTable.Rows(i - 1)("Quantidade") = box7.Text
                dtCurrentTable.Rows(i - 1)("TotalLiquido") = box8.Text

                rowIndex += 1

            Next i
            dtCurrentTable.Rows.Add(drCurrentRow)
            ViewState("CurrentTable") = dtCurrentTable

            Dados.DataSource = dtCurrentTable
            Dados.DataBind()

        End If

    Else
        Response.Write("ViewState null")
    End If
    SetPreviousData()
End Sub

1 Ответ

0 голосов
/ 18 августа 2010

Ваш For цикл определен неправильно, поэтому вы получаете сообщение об ошибке:

For i as Integer = 1 To i <= dtCurrentTable.Rows.Count
оценивается до
For i as Integer = 1 To True
(потому что я всегда <= Rows.Count) который VB переводится как <br> For i as Integer = 1 To -1
это означает, что ваш цикл никогда не запускается.

It должно быть

For i as Integer = 1 To dtCurrentTable.Rows.Count

Также есть что-то странное в том, как вы используете drCurrentRow = dtCurrentTable.NewRow. Почему это внутри цикла, когда вы ничего не делаете с ним в цикле? Он выполняется несколько раз, а затем dtCurrentTable.Rows.Add(drCurrentRow) вызывается только один раз.

Мне трудно исправить, потому что я не могу понять, что ты пытаешься сделать, но этот бит кажется мне хитрым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...