ASP.NET Gridview分页问题

时间:2009-02-23 21:44:02

标签: asp.net gridview custompaging

我有一个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 个答案:

答案 0 :(得分:7)

您正在重新绑定空数据源。您的代码应为:

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

答案 1 :(得分:0)

听起来很傻,你还记得再次调用你的数据绑定代码吗?当发生分页时,会发回一个帖子,并且GridView的数据源会丢失,因此您需要再次重新绑定数据,以便GridView可以根据页面加载适当的数据。

我认为这是我写的第二个或第三个ASP.NET应用程序之前我记得第一次重新编写代码时编写代码8 ^ D

答案 2 :(得分:0)

听起来像数据绑定问题。回发后你的数据源可能是空的吗?

其他事件如排序工作吗?

您可以在回发后单步执行代码的绑定部分并确认数据全部存在吗?

您有可以发布的任何代码吗?也许您应该创建一个测试工具,其中只包含无法尝试的代码部分并追踪问题。