【问题标题】:Deletion of multiple items in a collection bound to a datagridview takes forever删除绑定到 datagridview 的集合中的多个项目需要永远
【发布时间】:2009-04-30 12:13:09
【问题描述】:

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

会发生什么:

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

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

原因:

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

【问题讨论】:

  • 顺便说一句 - 我假设你的意思是“= false”(小写),第二次是“= true”。
  • 如果第二部分是答案,您应该将其添加到答案部分,然后将其标记为答案。然后人们可以将其作为答案进行投票,并且您会因为留下一个好的答案而获得 SO 的声誉(也许是回答您自己问题的徽章)。

标签: subsonic


【解决方案1】:

解决方案:

删除时,禁用 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.

现在只需眨眼即可完成相同的任务

【讨论】:

  • 我修正了真/假错字并将解决方案放在答案部分(感谢 Marc Gravell 和 ranomore)
猜你喜欢
  • 2011-10-29
  • 2010-10-26
  • 2011-01-30
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
相关资源
最近更新 更多