DataGridViewに大量の行数のデータを表示する機会がありました。
1万行から10万行程度のデータをDataGridViewにAddして表示しようとしたら、表示されるまでにかなりの時間がかかることが判明しました。
本記事はその解決方法についてです。
DataGridViewに1万行のデータを追加したら表示に約4秒かかった。
一番最初は何も考えずに以下のように、Rows.Addして1万行のデータを追加・表示しようとしました。
Stopwatch機能を使って処理時間を確認したら、約4000msec(4秒)かかることが判明…。
1 2 3 4 5 | for (int i = 0; i < 10000; i++) { this.dataGridView1.Rows.Add(); this.dataGridView1.Rows[i].Cells[0].Value = i; } |
ちなみに、10万行のデータを表示しようとしたら約40秒もかかりました…。
ここまでくると結構使い物になりませんね。
というわけでデータバインドを使って表示速度の改善を試みました。
ちなみに動作確認用のプログラムは、以下のようなボタン1つ&DataGridView1つの簡単なものです。
button1を押すと指定行数分のデータをDataGridViewに表示するという感じです。
DataGridViewにDataTableをバインドして表示速度改善を試みる!
DataGridViewに単純にデータをAddしていくと処理時間が膨大にかかります。
そんな時はデータバインドを利用すると、処理時間短縮が期待できます。
今回はDataTableを作成して、DataGridViewにデータバインドさせました。
ソースコードは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 | DataTable table = new DataTable(); table.Columns.Add("num1"); for (int i = 0; i < 10000; i++) { DataRow row = table.NewRow(); row["num1"] = i; table.Rows.Add(row); } this.dataGridView1.DataSource = table; |
まずはDataTableをnewします。
そのテーブルにColumnをAddしてあげます。今回は"num1"という名前をつけました。
そしてfor分で必要行数分のデータをテーブルにAddしていきます。
このとき、「row["num1"] = i;」でテーブルのColumnsの名前を指定してデータをセットしていきます。
最後に、「this.dataGridView1.DataSource = table;」でデータをバインドしてあげます。
これで完了。
1万行、10万行のデータ表示もさくっと表示してくれるようになりました!
表示したいデータが複数列ある場合は、以下のように必要数分テーブルに列をAddしてあげます。
その名前(ここでは、num2、num3)を使って値をセットしてあげればOK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | DataTable table = new DataTable(); table.Columns.Add("num1"); table.Columns.Add("num2"); table.Columns.Add("num3"); for (int i = 0; i < size; i++) { DataRow row = table.NewRow(); row["num1"] = i; row["num2"] = i + 1; row["num3"] = i + 2; table.Rows.Add(row); } this.dataGridView1.DataSource = table; |
もちろん列数が増えればその分、表示速度も遅くなりますので注意してください。
どのくらいの時間がかかるかは実際に実装してみて確認してみるとよいでしょう。
まとめ
DataGridViewのAddはデータ量が多くなればなるほど、表示速度が遅くなる。
データ数によっては、数十秒・数分かかるので要注意!
そんな時はDataTableなどを使ってデータをバインドさせ表示させることで、表示速度の改善が期待できます。
お困りの方は一度試してみてください。