Ошибка обновления строки Gridview - индекс вышел за пределы допустимого диапазона - PullRequest
1 голос
/ 27 июня 2011

Когда я нажимаю кнопку «Обновить» в виде сетки, она запускает событие RowUpdating, но возвращает ошибку «Индекс вышел за пределы диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс "

Ниже приведен код vb:

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
    If e.RowIndex >= 0 Then

        Dim row As GridViewRow = DirectCast(Gridview1.Rows(e.RowIndex), GridViewRow)
        Dim Col1_SL As CheckBox = DirectCast(row.FindControl("cb1_SL"), CheckBox)

.................       

        Dim cmd As New System.Data.SqlClient.SqlCommand
        Dim sql As String
        Dim reader As System.Data.SqlClient.SqlDataReader

        Using conn As New System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("hris_shiftdutyConnectionString").ConnectionString)
            conn.Open()
            cmd.Connection = conn
            sql = "SET DATEFORMAT dmy;UPDATE troster SET SL='" & Convert.ToInt32(Col1_SL.Checked) & "' where roster_key='" & Col1_RosterKey.Text & "';"
            cmd.CommandText = sql
            reader = cmd.ExecuteReader()
            conn.Close()
            reader.Close()
        End Using

        'Reset the edit index.
        Gridview1.EditIndex = -1

        'Bind data to the GridView control.
        BindData()
    End If

End Sub

Пожалуйста, помогите. Спасибо Джо

1 Ответ

1 голос
/ 27 июня 2011

Поскольку ViewState отключен, и вы привязываете данные только тогда, когда страница не публикуется, эта строка всегда завершится сбоем:

Dim row As GridViewRow = DirectCast(Gridview1.Rows(e.RowIndex), GridViewRow)

как счетчик на Gridview1.Rows будет равно 0.

Когда страница отправляется обратно на сервер, ASP.NET необходимо включить ViewState для элемента управления, чтобы он мог воссоздать элементы управления и правильно определить, какие события вызвать,какие значения элементов управления изменились и т. д. Вы должны включить ViewState, и вам нужно будет выяснить, что вызывает ошибку дерева элементов управления.В коде должны быть какие-то другие изменения.

Имейте в виду, что только привязка данных к GridView в Page_Load, когда страница не отправлена ​​обратно, верна, но вы не сможете правильно обработатьсобытия, если вы не включите ViewState на элементе управления.

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