| 分類:[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
|