WPF 数据网格 : Lazy Loading/Inifinite scroll

标签 wpf database datagrid scroll virtualization

我用 250 行填充数据网格。当用户使用滚动条向下滚动时(例如低于 75%),我想从数据库中获取接下来的 250 行,等等。这个想法是网格可能有数百万个结果,我们不想加载它们,直到用户请求它们。是否有针对此的现有机制?

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

最佳答案

所以看起来 DataGrid 的虚拟化属性对您没有帮助,因为它需要一个完整的数据集在 ItemsSource 中。

所以要有一个数据延迟加载(见文章Data Virtualization)你可以处理ScrollViewer.ScrollChanged事件并应用经典的服务器端分页方法。基本上你必须定义和计算像 Page Size, Page Number, Sort Order 这样你可以从数据库请求一个所需的数据集并将其显示在 UI 上。每次 Current Page NumberSort Order 发生变化时,您需要请求数据并更新网格的 ItemsSource,也许您还需要也恢复滚动位置,但我不确定。

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

我认为主要的挑战是计算页面大小、当前页码的值。我相信Logical Scrolling mode 将在这方面帮助您。

关于WPF 数据网格 : Lazy Loading/Inifinite scroll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7581732/

相关文章:

php - MySQL新用户的问题

在 Windows Azure 上发布后未创建数据库

wpf 数据网格错误/错误

c# - WPF MultiDataTrigger AND 条件

c# - 隐藏数据网格中的列,而不设置 column.visible=false

wpf - WPF中的Grid Splitter问题

c# - 动画后执行命令

wpf - 如何创建自己的 Freezable 类?

database - 大型应用程序的可扩展性

wpf - 将选定的行事件连接到 mvvmlight 命令