Проблема с разбивкой на страницы ASP.NET Gridview

У меня есть gridview, который привязан к данным в коде программной части с использованием хранимой процедуры. Я также обрабатываю событие Paging в коде, но всякий раз, когда я нажимаю на номер страницы, я продолжаю получать пустой шаблон данных вместо дополнительных строк. Какие-либо предложения?

РЕДАКТИРОВАТЬ: я повторно привязываю источник данных gv после изменения индекса страницы.

Вот мой код - у меня есть раскрывающийся список, который определяет источник данных:

Protected Sub ddlProjectForm_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlProjectForm.SelectedIndexChanged
    Dim strProjectFormID As String = Me.ddlProjectForm.SelectedValue
    Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("Conn").ConnectionString)
    Dim cmd As New SqlCommand()
    Dim da As New SqlDataAdapter
    Dim ds As New DataSet

    If strProjectFormID <> "Select" Then
        Try
            Using conn
                conn.Open()

                With cmd
                    .Connection = conn
                    .CommandType = CommandType.StoredProcedure
                    .CommandText = "sp_GetAllFormData"
                    .Parameters.AddWithValue("@projectFormID", strProjectFormID)
                End With

                da.SelectCommand = cmd
                da.Fill(ds)

                Me.gvAllSentData.DataSource = ds.Tables(0)
                Me.gvAllSentData.DataBind()
                Me.gvAllSentData.Visible = True
            End Using
        Catch sqlEx As SqlException
            Dim newError As New ErrorLogger(Me.Page.Title, sqlEx.Message, Session("UserName"))
            newError.LogError()

            Trace.Write(sqlEx.Message)
            Me.lblBadFeedback.Visible = True
            Me.lblBadFeedback.Text = "We're sorry - an error has occurred.  It has been logged and will be reviewed by the site admin."
        Catch ex As Exception
            Dim newError As New ErrorLogger(Me.Page.Title, ex.Message, Session("UserName"))
            newError.LogError()

            Trace.Write(ex.Message)
            Me.lblBadFeedback.Visible = True
            Me.lblBadFeedback.Text = "We're sorry - an error has occurred.  It has been logged and will be reviewed by the site admin."
        End Try
    Else
        Me.gvAllSentData.DataSource = Nothing
        Me.gvAllSentData.Visible = False
    End If

End Sub

Protected Sub gvAllSentData_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvAllSentData.PageIndexChanging
    Me.gvAllSentData.PageIndex = e.NewPageIndex
    Me.gvAllSentData.DataBind()
End Sub

Ответов (3)

Решение

Вы повторно связываете пустой источник данных. Ваш код должен читать:

Protected Sub gvAllSentData_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvAllSentData.PageIndexChanging
    Me.gvAllSentData.PageIndex = e.NewPageIndex
    Me.gvAllSentData.DataSource = __The_Data_To_Bind__
    Me.gvAllSentData.DataBind()
End Sub

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

Работают ли другие мероприятия, такие как сортировка?

Можете ли вы выполнить привязку кода после обратной передачи и подтвердить, что все данные есть?

У вас есть код, который вы можете опубликовать? Возможно, вам стоит создать тестовую программу, содержащую только те части кода, которые не работают, чтобы попытаться отследить проблему.

Как бы глупо это ни звучало, вы не забываете снова вызвать свой код привязки данных? Когда происходит разбиение на страницы, выполняется обратная публикация, и источник данных для вашего GridView теряется, поэтому вам нужно будет повторно привязать данные, чтобы GridView мог загружать соответствующие данные на основе страницы.

Я думаю, что это было мое второе или третье приложение ASP.NET, которое я написал до того, как вспомнил, что нужно повторно привязать данные в первый раз при написании кода 8 ^ D