Private m_dgWarehouseListDataSet As DataSet '倉庫一覧DataGridのDataSetオブジェクト Private m_dgWarehouseListTable As DataTable '倉庫一覧DataGridのDataTableオブジェクト
Private Sub InitDataGrid()
Dim i As Integer Dim sColumnName(ENUM_COLUMN_INDEX_LIST.INDEX_MAX) As String Dim iColumnWidth(ENUM_COLUMN_INDEX_LIST.INDEX_MAX) As Integer Dim dgColumn(ENUM_COLUMN_INDEX_LIST.INDEX_MAX) As DataColumn Dim dgTableStyle As DataGridTableStyle Dim dgColumnStyle(ENUM_COLUMN_INDEX_LIST.INDEX_MAX) As DataGridTextAlignColumn 'DataGridTextBoxColumnの継承クラス(再描画によるテキストのAlign設定)
'カラム作成(表示最大インデックス番号より大きい値のカラムを非表示にする) For i = 0 To ENUM_COLUMN_INDEX_LIST.INDEX_MAX dgColumn(i) = New DataColumn(sColumnName(i), GetType(String))
If i > ENUM_COLUMN_INDEX_LIST.SHOW_MAX Then dgColumn(i).ColumnMapping = MappingType.Hidden End If
Me.m_dgWarehouseListTable.Columns.Add(dgColumn(i)) Next
'列スタイルを作成してテーブルスタイルに追加 For i = 0 To ENUM_COLUMN_INDEX_LIST.INDEX_MAX dgColumnStyle(i) = New DataGridTextAlignColumn dgColumnStyle(i).MappingName = sColumnName(i)
'隠しカラム以外のカラム名をセット If i <= ENUM_COLUMN_INDEX_LIST.SHOW_MAX Then dgColumnStyle(i).HeaderText = sColumnName(i) End If
はじめまして。いつも大変参考にさせていただいております。
今、データ表示専用のためにDataGridを使用しています。
データグリッドのデータクリア後の処理に時間がかかるため、ずっと悩んでいます。
まずはフォームロード時にデータグリッドに初期データを表示しています。
そして、ボタン2クリックでいったんデータを削除します。
ボタン3クリックでデータを再表示する時に1行目のデータ追加のところで4〜5秒ほど時間がかかります。
時間がかかるのは、最初にクリアした後の一回目のみです。
一回クリアしてしまえば、後は何回データ表示とクリアを行ってもこのような問題が発生せずに、スムーズに処理を行うことが出来ます。
このような問題について解決方法をご存知の方がいらっしゃれば、何卒ご教授お願いいたします。
開発環境はWindows2000 VB.NET 2003 .NET Framework1.1です。
Private DataSet1 As DataSet
Private DataTable1 As DataTable
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call InitGrid() 'データグリッド初期化呼び出し
End Sub
'データグリッドの初期化処理
Private Sub InitGrid()
' DataGridコントロールを読み取り専用にする
DataGrid1.ReadOnly = True
Dim dataClumn1 As DataColumn
Dim dataClumn2 As DataColumn
Dim dataClumn3 As DataColumn
Dim dgTableStyle As DataGridTableStyle
DataSet1 = New DataSet("商品マスター")
DataTable1 = DataSet1.Tables.Add("商品テーブル")
dataClumn1 = DataTable1.Columns.Add("ID", Type.GetType("System.Int32"))
dataClumn2 = DataTable1.Columns.Add("商品", Type.GetType("System.String"))
dataClumn3 = DataTable1.Columns.Add("個数", Type.GetType("System.String"))
'テーブルのスタイルを作成
dgTableStyle = New DataGridTableStyle
dgTableStyle.MappingName = dataTable1.TableName
DataGrid1.TableStyles.Add(dgTableStyle)
' テーブルの列のスタイルを作成
Dim dgColumnStyle1 As DataGridTextBoxColumn
Dim dgColumnStyle2 As DataGridTextBoxColumn
Dim dgColumnStyle3 As DataGridTextBoxColumn
dgColumnStyle1 = New DataGridTextBoxColumn
dgColumnStyle2 = New DataGridTextBoxColumn
dgColumnStyle3 = New DataGridTextBoxColumn
dgColumnStyle1.MappingName = dataClumn1.ColumnName
dgColumnStyle2.MappingName = dataClumn2.ColumnName
dgColumnStyle3.MappingName = dataClumn3.ColumnName
'ヘッダーにタイトルを設定
dgColumnStyle1.HeaderText = dataClumn1.ColumnName
dgColumnStyle2.HeaderText = dataClumn2.ColumnName
dgColumnStyle3.HeaderText = dataClumn3.ColumnName
' 列のスタイルをテーブル・スタイルに登録
dgTableStyle.GridColumnStyles.Add(dgColumnStyle1)
dgTableStyle.GridColumnStyles.Add(dgColumnStyle2)
dgTableStyle.GridColumnStyles.Add(dgColumnStyle3)
'テーブルに初期データを追加
DataTable1.Rows.Add(New Object() {1, "みかん", 10000})
DataTable1.Rows.Add(New Object() {2, "りんご", 30000})
DataTable1.Rows.Add(New Object() {3, "バナナ", 12000})
DataTable1.Rows.Add(New Object() {4, "すいか", 28000})
DataTable1.Rows.Add(New Object() {5, "いちご", 20000})
DataTable1.Rows.Add(New Object() {6, "メロン", 15000})
DataGrid1.SetDataBinding(DataSet1, DataTable1.TableName)
End Sub
'データグリッドのクリア処理
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
DataTable1.Clear()
End Sub
'データの再表示
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'テーブルに初期データを追加
DataTable1.Rows.Add(New Object() {1, "みかん", 10000})'←この1行の処理に時間がかかる!!
DataTable1.Rows.Add(New Object() {2, "りんご", 30000})
DataTable1.Rows.Add(New Object() {3, "バナナ", 12000})
DataTable1.Rows.Add(New Object() {4, "すいか", 28000})
DataTable1.Rows.Add(New Object() {5, "いちご", 20000})
DataTable1.Rows.Add(New Object() {6, "メロン", 15000})
End Sub