|
分類:[VB.NET/VB2005 以降]
環境:VB.NET 2010 OS:WinXP SP3 (32bit)
初めまして、初心者の「とんちき」と申します。
よろしくお願いします。
DataGridViewを使用して1000行の表を作成しているのですが、2回目に実行するとなぜかすごく遅いです。
ちなみに1回目は、一瞬に処理が終了します。
2回目実行時間は55秒もかかってしまいます。
DataGridViewの性質(仕様)なのか,コードの記述が悪いのかわかりません。
ListViewで同じような表をしても1回目と2回目の実行時間には大差はありません。
ソースコードを貼りますので、ご指導、ご指摘またはアイディアを頂ければ幸いです。
よろしくお願いします。
-- 【ソース】 --
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
' 〜 省略 〜
#End Region
Private Sub メインフォーム_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
初期表示()
End Sub
Private Sub 初期表示()
With DataGridView1
.AutoGenerateColumns = False '手動列追加をゆるす
.AllowUserToOrderColumns = True '列の位置をユーザーが変更できるようにする
.AlternatingRowsDefaultCellStyle.BackColor = Color.PaleGreen '行の背景色を交合に色分けする
.AllowUserToAddRows = False 'ユーザーが新しい行を追加できないようにする
.AllowUserToDeleteRows = False 'ユーザーが行削除をしないようにする
.MultiSelect = False 'セル、行、列が複数選択されないようにする
.SelectionMode = DataGridViewSelectionMode.FullRowSelect '行全体が選択されるようにする
.ReadOnly = True '読込み専用
.Columns.Add("TENCD", "店舗コード") '1列名の追加
.Columns.Add("HINCD", "") '2列名の追加
.Columns.Add("HINNM", "商品名") '3列名の追加
End With
ProgressBar1.Hide()
End Sub
Private Sub データ取得ボタン_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim データ件数 As Integer
label2.Text = ""
'商品表のデータ部を削除
If DataGridView1.Rows.Count > 0 Then
DataGridView1.Columns.RemoveAt(2)
DataGridView1.Columns.RemoveAt(1)
DataGridView1.Columns.RemoveAt(0)
初期表示()
DataGridView1.Update()
End If
データ件数 = 1000
If データ件数 = 0 Then
MsgBox("該当するデータがありませんでした", "エラー")
label2.Text = "【該当データ無】"
Else
label1.Text = "データを取得中です" & データ件数.ToString & "件"
label1.Show()
label1.Update()
label2.Update()
' MsgBox("データを抽出します")
With ProgressBar1
.Show()
.Minimum = 0
.Value = 0
.Maximum = データ件数
.Update()
End With
Dim 行 As Integer
For 行 = 0 To データ件数 Step 1
DataGridView1.Rows.Add()
'商品表.Rows(行).Cells(0).Value = SQLデータ("TENCD")
DataGridView1.Rows(行).Cells(1).Value = String.Format("{0,7} ", 行)
'商品表.Rows(行).Cells(2).Value = RTrim(SQLデータ("HINNM"))
If 行 Mod 100 = 0 Then
ProgressBar1.Value = 行
label2.Text = String.Format("【現在 {0,7} 件】", 行)
label2.Update()
End If
Next
ProgressBar1.Value = データ件数
'列の自動調整
label1.Text = "後処理中です しばらくお待ちください"
label1.Update()
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
ProgressBar1.Hide()
label1.Hide()
label2.Text = String.Format("【該当 {0,7} 件】", 行)
End If
End Sub
End Class
|