1

用户注意到 DataGridView 中的记录开始出现在屏幕上的时间有所延迟。

所以我分析了日志,发现调用 DataTable.Rows.Add() 的时间和数据表中的记录数量之间存在很强的依赖关系。如果一开始不到 0.01 毫秒,当表中有大约 10000 条记录时增长到 1 毫秒,当 50000 条时增长到 5 毫秒。有两个线程:一个添加记录,另一个删除。DataTable 绑定到 DataGridView 意味着它会在每次 DataTable 行集合更改时自动更新 gridview。

我的理解是,在表中 100000 等记录的数量上,不应该有这样的延迟。我应该考虑为 DataGridView 实现 VirtualMode 吗?我注意到 VirtualMode 属性设置为 true,但未处理 CellValueNeeded 事件。

代码如下所示:

var row = table.NewRow();
//manipulations with row
table.Rows.Add(row);
row.AcceptChanges();

并删除:

var row = table.Rows.Find(id);
if (row != null) {
    row.Delete();
    row.AcceptChanges();
}
4

1 回答 1

0

是的,您必须考虑取消绑定DataTable 和 DataGridView 并使用 VirtualMode(VirtualMode 不能与绑定的 DataSource 一起应用)。您必须在 CellValueNeeded 事件中手动绑定 DataTable (请注意同步,因为每次都可以处理 CellValueNeeded 并可能导致索引错误)。

于 2016-01-27T08:51:22.533 回答