【问题标题】:DevExpress ASPxGridView with Large DataDevExpress ASPxGridView 与大数据
【发布时间】:2014-06-13 02:01:01
【问题描述】:

我正在修复一个网站,该网站广泛使用 DevExpress ASPxGridView 控件来搜索 SQL Server 上的表。然后对结果进行分页和解析。一些搜索结果可能相当大,我怀疑在这些情况下,带有本机 SqlDataSource 的 ASPxGridView 的内置寻呼机速度非常慢。在一次查询中,我观察到 SQL Server 和 IIS Server 之间的网络流量在不到一分钟的时间内达到了 1.5 GB。使用 ORDER BY (SELECT NULL) OFFSET x ROWS FETCH NEXT y ROWS 运行相同的查询只需要一瞬间。在控件上利用这种 SQL 端分页是另一回事。

看来我的局限性和权衡如下:

  1. DevExpress ASPxGridView 内置分页器无法明确设置项目数。
  2. 独立的 DevExpress ASPxPager 不支持客户端事件。
  3. 将 SqlDataSource 替换为 LinqServerModeSource 或 XpoDataSource 仍然需要从 SQL Server 解析整个结果集以获取完整计数,并且可能会遇到同样的性能问题。

如果以下任何一种可能的解决方案,我想提出建议:

  1. 有什么方法可以强制 DevExpress ASPxGridView 内置寻呼机使用外部计数?
  2. 有什么方法可以用 Asp.Net UpdatePanel 或 DevExpress ASPxCallbackPanel 封装 DevExpress ASPxPager 以支持客户端事件?
  3. LinqServerModeSource 或 XpoDataSource 能否从 SQL 查询中收集结果,因为 ASPxGridView 使用其他方式提供的总计数进行分页?

【问题讨论】:

  • 你试过this吗?
  • 这就是问题 3 的内容,因为在所有 DevExpress 示例中,数据源都是静态表,但在这种情况下,数据源是带有一些全文索引的查询或存储过程。
  • 如果您想使用服务器模式,我认为您必须根据该查询创建视图。尽管您可以使用 devex 支持进行检查。
  • 全文搜索的条件非常动态,因此不可能有固定的视图。
  • 使用 LinqServerModeSource 的另一个挑战是,尽管服务器保持不变,但数据库会发生变化。

标签: asp.net devexpress aspxgridview


【解决方案1】:

作为mentioned here,可以通过设置ASPxGridView.DataSourceForceStandardPaging = true 使用带有ASPxGridViewObjectDataSource 的SQL 服务器端分页。 DevExpress 链接到 GitHub 上的这个 example application,它有点损坏,但很容易修复。

它有效,但正如他们所说:

[...] 使用 ASPxGridView.DataSourceForceStandardPaging 时无法过滤 ObjectDataSource 数据源。

目前我试图通过不设置DataSourceForceStandardPaging 来欺骗ASPxGridView,但仍然使用ObjectDataSource 的服务器端分页:也许可以在ObjectDatasource 的结果集中插入虚拟行SelectMethod,然后使ASPxGridView“认为”已从数据库中检索所有行,以便寻呼机可以计算正确的总行数。

但我还没有完成它...很可能必须处理 SubstituteFilterCustomColumnSort 事件,以防止 ASPxGridView 过滤和排序虚拟记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多