C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 113 を表示中)
■66759 / )  DataGridViewの2回目が遅いのはなぜ? 【初心者】
□投稿者/ とんちき (1回)-(2013/05/22(Wed) 20:04:35)

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

返信 編集キー/


管理者用

- Child Tree -