クリエイター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