Member 13746151 Ответов: 1

System.argumentoutofrangeexception: индекс был вне диапазона. Должно быть неотрицательным и меньше размера коллекции. Имя параметра: индекс


Привет я все еще новичок в этом деле VB.Net. Я пытался сделать индексный пейджинг, и это было прекрасно для первого, второго и следующего пейджинга.Но когда я нажал на последнюю страницу, вышла ошибка.

- Индекс был вне досягаемости. Должно быть неотрицательным и меньше размера коллекции.Имя параметра: индекс"

Мой код выглядит следующим образом:

Что я уже пробовал:

Protected Sub gvadmin_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles gv_admin.RowCommand

        Dim index As Integer = Convert.ToInt32(e.CommandArgument)
        Dim row As GridViewRow = gv_admin.Rows(index)

        If (e.CommandName = "viewdoc") Then
            Dim revno As String = gv_admin.DataKeys(index).Values(0).ToString()
            Dim dept As String = gv_admin.DataKeys(index).Values(1).ToString()
            Dim ki As String = gv_admin.DataKeys(index).Values(2).ToString()
            Dim url As String = "ScheduleViewDoc.aspx"
            Dim s As String = "window.open('" & url & "?" & "revno=" & revno & "&eqdept=" & dept & "&ki=" & ki & "', 'popup_window', 'width=1450,height=700,left=10,top=10,resizable=no');"
            ClientScript.RegisterStartupScript(Me.GetType(), "script", s, True)
            BindGrid1()
        ElseIf (e.CommandName = "viewstatus") Then
            Dim eqstatus As String = gv_admin.DataKeys(index).Values(3).ToString()
            'Dim url As String = "MasterlistViewStatus.aspx"
            'Dim s As String = "window.open('" & url & "?" & "eqstatus=" & status & "', 'popup_window', 'width=450,height=500,left=10,top=10,resizable=no');"
            'ClientScript.RegisterStartupScript(Me.GetType(), "script", s, True)
            liststatus(eqstatus)
            mpstatus.Show()
            BindGrid1()

        End If
    End Sub



Ошибка --> Dim row As GridViewRow = gv_admin.Строки(индекс)

Bryian Tan

Не ясно, что в e.CommandArgument. Я предполагаю, что он проходит (1,2,3,45,6...)? Индекс строк начинается с 0,1,2,3,4,5 ... попробуйте gv_admin.Строки(индекс-1)

1 Ответов

Рейтинг:
1

OriginalGriff

Сообщение об ошибке довольно явное:

Index was out of range. Must be non-negative and less than the size of the collection.Parameter name: index
Значение индекса либо отрицательно, либо недопустимо. Помните, что индексы массива .NET начинаются с нуля и доходят до числа элементов минус один, поэтому, если у вас есть три элемента в массиве, допустимыми индексами будут 0, 1 и 2 - любое другое значение даст вам это исключение.

Вам нужно выяснить что именно index есть, и насколько велик этот gv_admin.Rows коллекция есть. Мы не можем этого сделать - у нас нет никакого доступа к вашим данным или вашему коду, пока он работает.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!