3

这不是问题,因为我已经回答过了。但它也可能对其他人有帮助。

这是发生的事情:

  1. 使用 Datagridview 创建一个 WinForm 并绑定一个 Subsonic ...Collection,其中加载了 500 多个对象
  2. 将一些列添加到数据网格并至少设置一个 autosizemode = fill
  3. 添加逻辑以删除所有选定的列(即在按键上 -> 删除)
  4. 标记所有记录并删除它们

这大约需要 30 秒。在高端 PC 上(并按比例放大:1 分钟 1000 ...)

原因:

每次删除一行时,集合 ListChanged 事件都会触发,这会导致 datagridview 重新计算自动调整列所需的空间(如果有人对“内部”感兴趣,我会附上一个调用图。

4

1 回答 1

0

解决方案:

删除时,禁用 ListChangedEvent:

mycollection.RaiseListChangedEvents = false;

// Delete multiple rows
foreach(DataGridViewRow row In dataGridView.SelectedRows) {
   dataGridView.Rows.Remove(row);
}


// After that you can re-enable the event:
mycollection.RaiseListChangedEvents = true;

// But you have to call
mycollection.ResetBindings();
//to let the datagridview perform at least one redraw.

同样的任务现在只需要眨眼

于 2009-05-11T11:25:22.513 回答