【问题标题】:GridView1_PageIndexChanging not changing when index changingGridView1_PageIndexChanging 在索引更改时不更改
【发布时间】:2014-01-02 11:33:26
【问题描述】:

我试图一次显示 50 个。它应该在“页面索引”更改时激活。原始的 Gridview 可以工作并且有 1000 多个条目。 GridView1_PageIndexChanging 或 GridView1.PageIndex = e.NewPageIndex 不起作用。 这是我的代码:

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="50" OnPageIndexChanging="GridView1_PageIndexChanging">
    </asp:GridView>

  Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging
    GridView1.PageIndex = e.NewPageIndex
    Dim connStr, cmdStr As String
    Dim myDataSet As New DataSet
    Dim dt As New DataTable()
    connStr = "connection string works"
    cmdStr = "SELECT * FROM table1;"
    Try
        Using conn As New SqlConnection(connStr)
            Using cmd As New SqlCommand(cmdStr, conn)
                conn.Open()
                cmd.ExecuteNonQuery()
                Using myDataAdapter As New SqlDataAdapter(cmd)
                    myDataAdapter.Fill(myDataSet)
                    dt = myDataSet.Tables(0)
                    Dim filteredSet = dt.AsEnumerable().Skip((GridView1.PageIndex - 1) * 50)
                    GridView1.DataSource = filteredSet
                    GridView1.DataBind()
                End Using
                conn.Close()
                cmd.Dispose()
                conn.Dispose()
            End Using
        End Using
    Catch ex As Exception

    End Try
 End Sub

【问题讨论】:

  • 我认为你应该使用CustomersGridView_PageIndexChanged事件而不是CustomersGridView_PageIndexChanging
  • 从 Gridview1_PageIndexChanging 更改为 Gridview1_PageIndexChanged 只是导致应用程序错误。

标签: asp.net vb.net gridview


【解决方案1】:

如果您允许,GridView 将为您处理分页。您不需要自己过滤查询。我有几个建议:

集中您的数据绑定代码
将所有数据绑定代码放在一个集中的函数中。这将使您的 PageIndexChanging 事件看起来更清晰,并降低拼写错误的风险(如果您必须在其他地方复制该代码)。应该是这样的:

Private Sub BindGrid()
    Dim connStr, cmdStr As String
    Dim myDataSet As New DataSet
    Dim dt As New DataTable()
    connStr = "connection string works"
    cmdStr = "SELECT * FROM table1;"
    Try
        Using conn As New SqlConnection(connStr)
            Using cmd As New SqlCommand(cmdStr, conn)
                conn.Open()
                cmd.ExecuteNonQuery()
                Using myDataAdapter As New SqlDataAdapter(cmd)
                    myDataAdapter.Fill(myDataSet)
                    dt = myDataSet.Tables(0)
                    GridView1.DataSource = dt
                    GridView1.DataBind()
                End Using
                conn.Close()
            End Using
        End Using
    Catch ex As Exception

    End Try
End Sub

注意:我把你的电话打给Dispose,因为它们是多余的(Using 块就是这样做的)

更新您的 PageIndexChanging 代码以调用该子
现在您可以为分页提供清理功能:

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging
    GridView1.PageIndex = e.NewPageIndex
    BindGrid() 
End Sub

优化:以某种方式缓存您的数据库调用
每次对 GridView 进行分页时,您不需要从数据库中检索 1,000 多行。第一次加载 Grid 时将 DataTable 放入 Session 变量中(我想是在 Page_Load 中):

Session("myGridViewData") = dt

然后在您再次需要时(例如在寻呼期间)将其从那里取出:

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging
    GridView1.PageIndex = e.NewPageIndex
    Gridview1.DataSource = CType(Session("myGridViewData"), DataTable)
    GridView1.DataBind()        
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-08
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多