データグリッドビューにバインドされたコレクション内の複数のアイテムの削除には永遠に時間がかかります

StackOverflow https://stackoverflow.com/questions/806605

  •  03-07-2019
  •  | 
  •  

質問

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

次のようになります:

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

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

原因:

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

役に立ちましたか?

解決

解決策:

削除中は、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.

同じタスクは瞬きだけを取ります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top