クリエイターDP日誌

印刷、webのデザイン、プログラマーまで全部やってます

DataGridViewの処理速度アップ方法

DataGridViewの行または列を削除するプログラムを書くと、その処理の遅さに辟易する。
諸悪の根源は

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

「DataGridViewAutoSizeColumnsMode.DisplayedCells」を使ってもいいんですけど・・・。
処理を早くしようとするとするなら、こんな処理で。

'一旦Noneにして処理を行う
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None

// 処理

'復帰
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

しかし、これをするとスクロールバーが一旦短くなってしまうので、表示されているセルがどっかへ行ってしまう。
仕方ないのでスクロールバーの位置を保存して復帰する必要がある

dim sc as integer = 0
dim sr as integer = 0

'一旦Noneにして処理を行う
sc = DataGridView1.FirstDisplayedScrollingColumnIndex
sr = DataGridView1.FirstDisplayedScrollingRowIndex
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None

// 処理

'復帰
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
DataGridView1.FirstDisplayedScrollingColumnIndex = sc + 1
DataGridView1.FirstDisplayedScrollingRowIndex = sr

VB.netってこういう小手先の処理が必要な事が多い。。。
以下も解除しておきましょうw

DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing

windows7の「エクスプローラーは動作を停止しました」の件

windows7を使用しているとかなりの高確率で「エクスプローラーは動作を停止しました」に当たる。
マイクロソフトの「KB2494427」というhotfixを適用すると大体直るのでメモ。

Windows 7 または Windows Server 2008 R2 でネットワーク検出状態がオンに設定されていると、エクスプローラーがランダムにクラッシュすることがある

メールを入力してダウンロード先アドレスを入手しないといけないので、マイクロソフトのIDが無い人は、ワンタイムメール等でゲットすれば良い。

その他にも原因が違うエラーの場合もあるが、今まで見た「エクスプローラーは動作を停止しました」は、このhotfixで直る事が多かった。
是非試して欲しい。