关于实施建议的一般性问题。
我有一个绑定到的集合datagridview
.
BindingList<Line> allLines = new BindingList<Line>();
dataGridView1.DataSource = allLines;
我想实施virtual mode
因为该集合可能包含数百万个条目(Line
对象),所以我认为仅“缓存”或一次显示一些需要的条目可能会更快。我理解虚拟模式的用途是什么?
我看过:http://msdn.microsoft.com/en-us/library/2b177d6d.aspx
但我无法让它工作datagridview
那是databound
.
我无法指定行数:
this.dataGridView1.RowCount = 20;
`RowCount property cannot be set on a data-bound DataGridView control.`
编辑:此链接表明我可能必须完全删除绑定。是这样吗?http://msdn.microsoft.com/en-us/library/ms171622.aspx
“如果绑定模式不能满足您的性能需求,您可以通过虚拟模式事件处理程序管理自定义缓存中的所有数据。”
如果你想使用DataGridView.VirtualMode,那么您不应该使用绑定数据集。他们是对立的。所以,你没有设置DataSource
,但只需设置RowCount
属性并提供事件处理程序DataGridView.CellValueNeeded 事件.
除此之外你还需要设置dataGridView.VirtualMode
财产给true
首先,可能是写在设计器中。默认情况下它设置为false
,这就是为什么你会得到一个异常,说你不能设置RowCount
.
可能您必须手动初始化网格的列。
在刷新网格时(例如,单击按钮),您必须
dataGridView.RowCount = 0;
\\refresh your cache, where you store rows for the grid
\\...
dataGridView.RowCount = yourCache.Count;//or some other property, getting the number of cached rows.
The CellValueNeeded
将为每行的每一列触发事件,具体取决于 RowCount 和列数。您应该设置e.Value
事件处理程序中已处理单元格的值取决于e.RowIndex
and e.ColumnIndex
.
因此,要使其发挥作用,您至少需要处理CellValueNeeded
。如果您的 DataGridView 是只读的,则不需要其他事件。
更完整和连续的概述可在Windows 窗体 DataGridView 控件中的虚拟模式.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)