【问题标题】:Client side pagination on ASP.NET GridViewASP.NET GridView 上的客户端分页
【发布时间】:2011-12-14 20:54:07
【问题描述】:

我有一个客户想要从 Web 服务返回一个 ENORMOUS 查询,并且不会让步。他们坚信查询必须能够返回绝对所有内容,而且他们也不允许我们进行任何类型的服务器端分页。

我们让它正常工作,以便它可以很好地返回所有数据,并且我们将它显示在 ASP.NET GridView 中。为了加快巨大网格的渲染速度,我们决定实现客户端分页,但我不确定如何去做。

目前,我们将全部数据存储在 ViewState 中,然后根据它进行分页和排序,以避免再次访问服务器。

但是,在默认设置下,当尝试选择除第一个以外的任何页面时,它会返回 404 错误。我猜这是因为它在尝试通过 ViewState 发送大量数据集时超时。

有没有什么方法可以返回数据集,然后在客户端上进行所有的分页和排序,而无需进行任何形式的回发?还是有其他我们没有想到的方法来做到这一点? (除了服务器端分页。我们很乐意这样做,因为它显然是正确的方式,但客户端不会让步......)

编辑:如果可能的话,我想坚持使用 ASP.NET GridView 控件。我们已经找到了几个不同的选项,比如 jQuery 之类的,但是如果我们更改为不同类型的控件,我们还有很多东西需要更改。所以我想尽可能避免改变它。

【问题讨论】:

  • 我会推荐使用基于 Java 脚本的网格。如果你对 JQuery 没问题,dataTable 对你来说很好。
  • 是否禁止使用 AJAX 进行部分回发?还是只是完整的回发?
  • AJAX 完全没问题。任何东西都是一种选择,只要它不必再次与数据库对话。
  • 作为曾经打过这场仗的人,我很同情。我使用Repeater 控件来尽可能加快渲染速度,但是如果您已经连接了很多事件,那么切换可能会很痛苦。

标签: asp.net gridview paging


【解决方案1】:

如果时间对您来说不是大问题,那么从数据库中获取所有记录所需的时间,我相信在客户端,网格通常呈现为 HTML 表,而不是您可以使用 jquery 插件将在客户端对表格进行分页。

http://www.codeproject.com/KB/webforms/clientside_gridviewpaging.aspx

【讨论】:

  • 那个脚本,结合这个客户端排序脚本,应该做问题所要求的:beyondrelational.com/blogs/hima/archive/2011/01/01/…
  • 您自己是否偶然实施了此解决方案?即使在创作者网站上进行了一些挖掘之后,我也无法使其正常工作。
  • 是的,你的问题到底是什么
  • 确保将脚本放在表格之后
  • 好吧,我已经添加了 javascript 和 css,并在网格下添加了 div 用于分页按钮,但没有任何显示。
【解决方案2】:

我们遇到了 Viewstate 本身成为性能问题的情况,因此必须想办法解决类似情况...

您的选择很大程度上取决于问题中未包含的一些细节。

例如?来自 Web 服务的数据多久更改一次?您可以执行以下操作之一:

  • 将结果保存在 Cache 或 Session 中(如果结果那么大,这不是一个好主意...)
  • 将结果序列化为 Xml 文件并在分页时从中读取
  • 定期将数据导入 SQL 数据库或 SQL 数据库中的临时表,并使用一些标识符将数据与用户联系起来。

【讨论】:

  • 这些是一些有趣的想法。每次我们运行查询时,数据都可能发生变化。
  • 您建议我们将 XML 文件存储在哪里?
  • 我们将其存储在应用程序外部设置的特殊文件夹中,这样如果应用程序更新,我们就不会丢失文件。您需要设置权限,以便网络服务帐户对文件夹具有“修改”权限,但除此之外它非常简单。序列化结果的难度取决于您从 Web 服务返回的内容。
  • 我们最终将它存储在 Session 中。我知道这绝对不理想,但整个情况很混乱,所以只要它有效,我就很高兴。
【解决方案3】:

我在使用 jquery tablesorter 插件时很幸运。它提供了一些不错的选择。

http://tablesorter.com/docs/

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2011-02-07
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多