2 Stimmen

ASP.NET Gridview Paging Problem ASP.NET Gridview-Paging-Problem

Ich habe ein GridView, das im Code-Behind mit einem gespeicherten Prozedur datengebunden ist. Ich behandele auch das Paging-Ereignis im Code, aber immer wenn ich auf eine Seitennummer klicke, erhalte ich stattdessen die leere Daten-Vorlage anstelle von mehr Zeilen. Irgendwelche Vorschläge?

EDIT: Ich bin dabei, die Datenquelle des gv neu zu binden, nachdem ich den Seitenindex geändert habe.

Hier ist mein Code - Ich habe eine Dropdown-Liste, die bestimmt, was die Datenquelle ist:

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 = "Es tut uns leid - es ist ein Fehler aufgetreten. Er wurde protokolliert und wird vom Site-Administrator überprüft."
        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 = "Es tut uns leid - es ist ein Fehler aufgetreten. Er wurde protokolliert und wird vom Site-Administrator überprüft."
        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()

7voto

Gavin Miller Punkte 41976

Sie binden eine leere Datenquelle erneut. Ihr Code sollte wie folgt aussehen:

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 = __Die_zu_bindenden_Daten__
    Me.gvAllSentData.DataBind()
End Sub

0voto

Dillie-O Punkte 28749

So albern es klingt, erinnerst du dich daran, deinen Databinding-Code erneut aufzurufen? Wenn das Paging auftritt, wird ein Postback durchgeführt und die Datenquelle für dein GridView geht verloren. Du musst also die Daten erneut binden, damit das GridView die entsprechenden Daten basierend auf der Seite laden kann.

Ich glaube, es war meine zweite oder dritte ASP.NET-App, bei der ich mich daran erinnerte, beim Schreiben des Codes das erste Mal erneut zu binden 8^D

0voto

Robin Day Punkte 97662

Es klingt tatsächlich nach einem Datenbindungsproblem. Vielleicht ist Ihre Datenquelle nach dem Postback leer?

Funktionieren andere Ereignisse wie Sortieren?

Können Sie den Bindungsteil des Codes nach dem Postback durchgehen und bestätigen, dass alle Daten vorhanden sind?

Haben Sie Code, den Sie veröffentlichen können? Vielleicht sollten Sie ein Testharness erstellen, das nur die Teile des Codes enthält, die nicht funktionieren, um das Problem nachverfolgen zu können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X