我的代码如下:
private void dataGridView4_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
Records recordsTmp = null;
recordsTmp = (Records)this.ArrayOfRecords[e.RowIndex]; //ArrayList with string[] objects inside
switch (dataGridView4.Columns[e.ColumnIndex].HeaderText)
{
case "#":
e.Value = recordsTmp.nr;
break;
case "ip":
e.Value = recordsTmp.Ip;
break;
case "long":
e.Value = recordsTmp.Long;
break;
case "3":
e.Value = recordsTmp.type;
break;
case "4":
e.Value = recordsTmp.time;
break;
}
- ArrayOfRecords每秒更新10-100个string[]对象。
- VirtualMode设置为true。
- SelectionMode设置为FullRowSelect。
- dataGridView是只读的。
现在还有一个ProgressBar,采用Marquee样式,它显示当滚动到5000+行时,Form会冻结,但我想这只是一个线程/后台工作等问题。
最让我担心的是选择。在有8000行的情况下,点击最后一行(第8000行)需要4.2秒才能选择。具体情况如下:
4000行需要2.1秒,以此类推。如果选择了第8000行,最小化和最大化需要4.2秒。选择第一行可以“使其”恢复正常。这是无法接受的。*为什么对于我的Form来说标记第8000行如此困难呢?
VirtualMode的分页功能完美地工作,但选择却是一个痛点。
还有另一个问题/行为:
为什么我鼠标移动到行上时,CellValueNeeded事件会被触发?它们已经被绘制了,那为什么还要浪费资源呢?
有没有解决这个选择问题的方法?还是我必须限制datagrid中的最大记录数?