3

これは質問ではありません。すでに回答済みです。しかし、それは他の人にも役立つかもしれません。

何が起こるかは次のとおりです。

  1. Datagridview を使用して WinForm を作成し、Subsonic ...Collection をバインドして、500 以上のオブジェクトをロードします。
  2. データグリッドにいくつかの列を追加し、少なくとも 1 つの autosizemode = fill を作成します
  3. 選択したすべての列を削除するロジックを追加します (つまり、キーを押す -> 削除)。
  4. すべてのレコードをマークして削除する

これには約 30 秒かかります。ハイエンドPC上(およびスケールアップ:1000で1分...)

原因:

行を削除するたびにコレクションのListChangedイベントが発生し、データグリッドビューが自動サイズ調整された列に必要なスペースを再計算します(誰かが「内部」に興味がある場合は、コールグラフを添付しました.

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 に答える