gpt4 book ai didi

asp.net - 使用asp :GridView分页时是否需要重新检索数据

转载 作者:行者123 更新时间:2023-12-02 20:48:51 25 4
gpt4 key购买 nike

我有一个 .aspx 搜索屏幕,它在 asp:GridView 组件中显示搜索结果。搜索最多可返回约 1000 条记录。我想在网格上实现分页,以便每次只显示 15 条记录,并且用户可以分页浏览结果。

我通过将搜索参数传递给 WCF 服务来检索记录,该服务返回特定实体对象的列表。我创建一个数据表并从列表中为每个实体对象插入一个数据行。然后,我将 GridView 绑定(bind)到数据表。

这就是我的网格在 .aspx 页面中的定义方式:

<asp:GridView ID="gridCat" runat="server" AutoGenerateColumns="False" DataKeyNames="CatalogueID" 
HeaderStyle-CssClass="fieldHeading" RowStyle-CssClass="fieldContent"
AlternatingRowStyle-CssClass="alternateFieldContent" Width="100%"
AllowPaging="True" AllowSorting="True" AutoGenerateDeleteButton="True"
PageSize="15">

我在后面的代码(.aspx.vb 文件)中也有这个方法:

    Sub GridPagingAction(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles gridCat.PageIndexChanging
gridCat.PageIndex = e.NewPageIndex
gridCat.DataBind()
gridCat.Visible = True
End Sub

我的问题是这样的:第一页正确呈现,即前 15 条记录正确显示。但是,当我导航到网格中的第 2 页时,服务器上会调用 GridPagingAction 方法,但网格中不会显示任何内容 - 它只是空白。

我认为发生这种情况的原因是因为当第二页的请求到达服务器时数据表不再存在于服务器上 - 对吗?而 asp:GridView 在渲染第一页结果时,仅从 Datatble 中获取前 15 条记录并将它们发送回浏览器。因此,当对第二页的请求出现在其他记录(即记录 16 - 1000)中时,任何地方都不存在 - 这一切都正确吗?

如果是这样,最好的解决方案是什么 - 我不知道如何实现分页,而无需执行以下操作之一:

  1. 每次用户使用分页选项时重新执行搜索;
  2. 每次用户使用分页选项时第一次搜索检索搜索结果后,将搜索结果保存在 session 中;
  3. 手动将搜索结果插入 ViewState 并在用户每次使用分页选项时检索它们。

是否有更好的方法来做到这一点(或者我做错了)?如果不是,您认为这 3 个选项中哪一个最好?我倾向于选项 2,因为我认为选项 1 性能不佳,并且我不想按照选项 3 将大量不必要的数据发送回浏览器。

最佳答案

你说的都是对的。您可以使用 ViewState 或 Session 来保存客户端或服务器端的数据,但如果您确实有那么多记录,那么只收集您实际需要的数据可能是个好主意。

因此,如果您想显示记录 1 到 10,您可以对数据库执行查询并仅获取这 10 条记录。如果您想显示接下来的十个,请使用相应的参数执行另一个查询。

如果调用数据库的成本不是太高,这将显着提高您的性能和内存使用率。

本文可能会让您开始了解如何执行此操作: http://dotnetslackers.com/articles/gridview/Optimized-Paging-and-Sorting-in-ASP-NET-GridView.aspx

如果您想要一个简单的解决方案而不需要任何额外的努力,我会查询每个回发的所有记录(您的选项#1)。如果您想要性能最佳且开销不大的解决方案,请使用自定义分页。

关于asp.net - 使用asp :GridView分页时是否需要重新检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7512316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com