有大量数据要从数据库中检索并显示在 datagridview 上。我使用 API(Asmx) 方法来获取数据。我想在用户向下滚动网格时加载数据(调用 api)。我不想在表单加载本身时获取所有数据。
我有 API 来获取部分数据。当用户向下滚动并将网格绑定为不断滚动时,我如何调用此 api?
这是一个相当大的挑战。任何帮助将不胜感激。谢谢!
有大量数据要从数据库中检索并显示在 datagridview 上。我使用 API(Asmx) 方法来获取数据。我想在用户向下滚动网格时加载数据(调用 api)。我不想在表单加载本身时获取所有数据。
我有 API 来获取部分数据。当用户向下滚动并将网格绑定为不断滚动时,我如何调用此 api?
这是一个相当大的挑战。任何帮助将不胜感激。谢谢!
你想要的VirtualMode是DataGridView. 查看这篇MSDN 文章,它解释了为什么它对您的批量数据有好处。
虚拟模式设计用于非常大的数据存储。当 VirtualMode 属性为 true 时,您将创建一个具有一定数量的行和列的 DataGridView,然后处理 CellValueNeeded 事件以填充单元格。虚拟模式需要实现底层数据缓存,以根据用户的操作来处理 DataGridView 单元格的填充、编辑和删除。有关实现虚拟模式的详细信息,请参阅如何:在 Windows 窗体 DataGridView 控件中实现虚拟模式。
还有一个关于设置这里的教程。
C.Barlow - 提供了一个很好的解决方案,效果很好。我还想提出一个替代解决方案。
在 DataGridView 滚动事件上,我们可以加载数据,因为用户向下滚动并到达网格的底部。
private void Grid_Scroll(object sender, ScrollEventArgs e)
{
if (e.Type == ScrollEventType.SmallIncrement || e.Type == ScrollEventType.LargeIncrement)
{
if (e.NewValue >= Grid.Rows.Count - GetDisplayedRowsCount())
{
//Load additional data here and add to your existing grid rows
//Keep track of last visible row and set it
}
}
}
//GetDisplayedRowsCount() 将为您提供行数。获取行数的简单函数