- PR -

DataGridViewは遅い

1
投稿者投稿内容
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2008-02-07 17:15
こんにちは。

DataGridViewを使って、得意先コード検索画面を作っています。

DataGridViewは簡単に2行表示できない為
取得したDataTableをLOOPさせ、項目を改行コードで付けて
DataGridViewにセットしました。

For Each ROW As DataRow In DataTable.Rows
DataGridView.Rows.Add(ROW("項目1"), ROW("項目2") & Chr(13) & ROW("項目3"))
Next

とし、プロパティを行の高さを変更するなど設定しました。

DataGridViewのプロパティを設定すると5000件のデータで30秒、
1万件だと1分もかかってしまいます。

プロパティを設定しないと5秒ほどです。

下記がDataGridViewのプロパティの内容です。

With DataGridView
.AllowUserToResizeColumns = False
.AllowUserToResizeRows = False
.AllowUserToAddRows = False
.ReadOnly = True
'
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
'
.CellBorderStyle = DataGridViewCellBorderStyle.Single
.DefaultCellStyle.WrapMode = DataGridViewTriState.True
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders
End With


この中でAutoSizeRowsMode を設定しているから
遅いみたいです。

2行表示させたい為、設定しているのですが
スピードの件は、諦めるしかないでしょうか?
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-07 18:27
AllCellsExceptHeadersを設定すると、
各行毎に、各セルの必要な高さを求めて、最適な高さを設定する為
行数及び列数が増えるにつれ、処理が重くなります。

各行が一定の高さであるならば、RowTemplate.Heightにて高さ指定すれば
少しはましになると思います。

もっと速くするには、DataGridView.Rows.Addを使用せずに下記の様にしてください。
コード:

For Each ROW As DataRow In DataTable.Rows
Dim newRow As DataGridViewRow = New DataGridViewRow()
newRow.CreateCells(Me.DataGridView, ROW("項目1"), ROW("項目2") & Chr(13) & ROW ("項目3"))
newRow.Height = 30
Me.DataGridView.Rows.Add(newRow)
Next



【サンプルコード記述ミス修正】

[ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-07 18:29 ]

【追記】
提示サンプルコードは、各行毎に高さを変えたい時に特に有効かと思います。

[ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-07 18:43 ]
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2008-02-08 01:26
画面上に表示されていない行は高さを変えないという手もありますよ。
DataGridViewの仮想モードについて調べてみるといいと思います。

手間は色々多いですけど。
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2008-02-08 10:57
ありがとうございます。

RowTemplate.Heightにて
対応して5000件のデータで4秒になりました。

1

スキルアップ/キャリアアップ(JOB@IT)