0

当我从虚拟模式数据网格中检索行列表时,我不断收到异常(见下文),这仅在我的行数超过屏幕上显示的行数时才会发生,而且并非每次都会发生。关于虚拟模式,我有什么遗漏吗?

更新>下图显示了问题,索引现在超出了列表范围。这样做的原因是说我有 10 个项目,我隐藏了 5 个,因为它们不需要,我想在 5 个可见的代码上运行一些代码,现在有 5 个项目,但有些项目的索引可能在 5-9 之间,如何我可以重新索引吗?当我在可见的 5 上运行一些代码时,我会显示隐藏的 5,所以我不想忽略这些,当它们都可见时,我需要再次重新索引。非常感谢。

替代文字

4

4 回答 4

0

I've only used virtual mode with DataGridView, but in virtual mode you are supposed to store the data yourself and provide it when the datagrid needs to for rendering. I suppose the datagrid is only creating the minimum number of items that is needed to fill the view and then reuse them for performance reasons.

于 2009-07-27T13:56:50.047 回答
0

这对我来说有点像线程问题。您是否使用 BackgroundWorker 或类似的东西来填充 _items 变量?看起来 _items 中的事物数量在您循环时正在发生变化。

也许您可以尝试使用以下方法围绕处理 _items 的所有代码:

lock (_items) 
{
    // your code
}

或者,如果您的填充/更改代码仍在运行(也许使用某种布尔哨兵变量),则中断这些函数并返回 null。

于 2009-07-27T14:03:48.023 回答
0

你是如何设置数据绑定的。

您是否可以针对基础数据集而不是通过数据网格进行操作。

于 2009-07-27T14:23:19.617 回答
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

于 2010-04-21T10:19:45.490 回答