当我从虚拟模式数据网格中检索行列表时,我一直遇到异常(见下文),这只发生在我有更多行而不是我在屏幕上显示的行时,并且每次都不会发生这种情况。关于虚拟模式,我有什么遗漏吗?
更新>下图显示了问题,索引现在在列表范围之外。这样做的原因是我有10个项目,我隐藏了5个因为它们不需要而且我想在5个可见的上运行一些代码,现在有5个项目,但有些索引可能介于5-9之间,如何我可以重新索引吗?当我在可见光5上运行一些代码时,我会显示隐藏的5,所以我不想贬低它们,当它们全部可见时我需要再次重新索引。非常感谢。
答案 0 :(得分:0)
我只使用了DataGridView的虚拟模式,但在虚拟模式下,您应该自己存储数据,并在数据网格需要渲染时提供。我想数据网格只是创建填充视图所需的最小项目数,然后出于性能原因重用它们。
答案 1 :(得分:0)
这对我来说有点像线程问题。您是否使用BackgroundWorker或类似的东西来填充_items变量?看起来_items中的事物数量在循环时会发生变化。
也许你可以尝试使用这个来处理任何和所有处理_items的代码:
lock (_items)
{
// your code
}
或者,如果您的填充/更改代码仍在运行,则中断这些函数并返回null(或许使用某种布尔值的Sentinel变量)。
答案 2 :(得分:0)
您是如何设置数据绑定的。
您是否可以使用基础数据集而不是通过数据网格。
答案 3 :(得分:0)
请注意DataGridView的虚拟模式限制。尽管它具有假设的低内存消耗功能(只有可见行从数据库加载);每一行都有自己的实例(为了证明,尝试调整每个DataGridView行,可以相互独立地设置行的大小,因此每行的信息(例如RowHeight)需要保存在自己的内存中)
设置RowCount时,它将根据您在RowCount中指定的内容实例化 n行数。从而打败了DataGridView的虚拟模式的原始目的之一,即低内存消耗。内存消耗过多会降低数据网格显示的速度
在此处查看我的文章http://www.codeproject.com/KB/grid/DataGridView_Billion_Rows.aspx,以及另一篇文章http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/243a81e7-909b-4c8e-9d28-6114248cf66e