2009-02-23 7 views
2

J'ai un gridview qui est databound dans le code-behind en utilisant une procédure stockée. Je gère également l'événement Paging dans le code, mais chaque fois que je clique sur un numéro de page, je continue d'obtenir le modèle de données vide au lieu de plus de lignes. Aucune suggestion?Problème de pagination ASP.NET Gridview

EDIT: Je lie de nouveau la source de données du gv après avoir modifié l'index de la page.

Voici mon code - j'ai une liste déroulante qui détermine la source de données est:

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 

Répondre

7

Vous reconsolidation un vide source de données. Votre code devrait être:

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 
0

Aussi stupide que cela puisse paraître, vous rappelez d'appeler votre code de liaison de données à nouveau? Lorsque la pagination se produit, un post-retour est effectué et la source de données de votre GridView est perdue. Vous devrez donc relier à nouveau les données afin que GridView puisse charger les données appropriées en fonction de la page.

Je pense qu'il était mon deuxième ou troisième application ASP.NET j'avais écrit avant que je remembed à nouveau DataBind la première fois par écrire du code 8^D

+0

Oui, je lie après avoir défini le nouvel index de page. – Brian

+0

Hmm, pouvez-vous éditer votre question initiale et y poster votre code? –

0

Cela ressemble à un problème de liaison de données. Peut-être que votre source de données est vide après la publication?

D'autres événements tels que le tri fonctionnent-ils?

Pouvez-vous parcourir la partie de liaison du code après la publication et confirmer que les données sont toutes là?

Avez-vous du code que vous pouvez publier? Peut-être que vous devriez créer un harnais de test contenant seulement les parties du code qui ne fonctionnent pas pour essayer de localiser le problème.