DevExpress ASPxGridView与大数据

时间:2014-06-13 02:01:01

标签: asp.net devexpress aspxgridview

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

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

  1. 内置于寻呼机的DevExpress ASPxGridView无法明确设置项目数。
  2. 独立的DevExpress ASPxPager不支持客户端事件。
  3. 使用LinqServerModeSource或XpoDataSource替换SqlDataSource仍然需要从SQL Server解析整个结果集以获得完整计数,并且可能会遇到相同的性能问题。
  4. 如果有以下任何可能的解决方案,我想提出建议:

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

1 个答案:

答案 0 :(得分:0)

mentioned here一样,可以通过设置ASPxGridViewObjectDataSourceASPxGridView.DataSourceForceStandardPaging = true一起使用SQL Server端分页。 DevExpress链接到GitHub上的此example application,虽然有点破损,但很容易修复。

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

  

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

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

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