WPF Datagrid:延迟加载/无限滚动

时间:2011-09-28 10:22:26

标签: wpf database datagrid scroll virtualization

我用250行填充Datagrid。当用户使用滚动条向下滚动时(例如,低于75%),我想从数据库中获取接下来的250行,依此类推。我们的想法是,网格可能有数百万个结果,我们不希望将它们全部加载,直到用户请求它们为止。是否有现成的机制?

编辑:因为似乎存在很多困惑:我不是在寻找标准数据虚拟化解决方案,我已经使用them。但是它们都要求你提前指定“虚拟行”的数量,而这个查询对我来说代价很高。他们之所以需要它,是因为当你知道网格中的总项数时,它会更容易计算当前页面/偏移量等。但是计算该数量是一个非常昂贵的SQL查询,所以我想迁移到另一个我可以跳过COUNT()查询的解决方案。

2 个答案:

答案 0 :(得分:1)

所以看起来DataGrid的Virtualization属性对你没有帮助,因为它需要一个完整的数据集在ItemsSource

为了实现数据延迟加载(请参阅文章Data Virtualization)您可以处理ScrollViewer.ScrollChanged事件并应用传统的服务器端分页方法。基本上,您必须定义和计算诸如Page SizePage NumberSort Order之类的单词,这样您就可以从数据库请求所需的数据集并在UI上显示它。每当Current Page NumberSort Order发生变化时,您需要请求数据并更新网格的ItemsSource,也许您还需要恢复滚动位置,但我不确定此

  • 计算可见项目数
  • 使用PageNumber,PagiSize等参数对数据库进行参数化查询的数据请求
  • 通过刚加载的数据项更新DataGrid ItemsSource

我认为主要的挑战是计算页面大小,当前页码的值。我相信Logical Scrolling模式可以帮助你。

答案 1 :(得分:0)

将DataGrid的EnableRowVirtualization属性设置为true

因此,当用户滚动时将加载行,因此实际只会加载可见行

相关问题