删除绑定到datagridview的集合中的多个项目将永远消失

时间:2009-04-30 12:13:10

标签: subsonic

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

以下是发生的事情:

  1. 使用Datagridview创建一个WinForm并绑定一个Subsonic ... Collection,加载了超过500个对象
  2. 向数据网格添加一些列,并至少创建一个autosizemode = fill
  3. 添加逻辑以删除所有选定的列(即在按键上 - >删除)
  4. 标记所有记录并将其删除
  5. 这应该需要大约30秒。在一台高端电脑上(并向上扩展:1分钟,1000 ......)

    原因:

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

1 个答案:

答案 0 :(得分: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.

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