有大量数据要从数据库中检索并显示在 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() 将为您提供行数。获取行数的简单函数