- PR -

DataGridViewの表示速度の遅さ。

1
投稿者投稿内容
はたけ
常連さん
会議室デビュー日: 2006/02/08
投稿数: 27
投稿日時: 2008-08-27 18:33
プログラム内で、DataTableにデータを作成しています。
DataTableのサイズは行*1000、列*10で全てStringです。

この状態で,DataGridViewのDataSourceにDataTableを設定します。
設定ataGridView1.DataSource = DataTable;
すると、この1ステップで20秒ほど時間がかかります。
あまりにも遅すぎます。

また、上記表示後、セルを一つ選んで更新すると、それだけで、また20秒くらい固まります。

どうにかならないものでしょうか?
仕様の都合上、同時にすべてのデータを表示させたいです。



はたけ
常連さん
会議室デビュー日: 2006/02/08
投稿数: 27
投稿日時: 2008-08-27 18:34
化けていまね。

設定は、DataGridView1.DataSource = DataTable;

以上です。
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-08-27 18:43
VirtualModeプロパティ、仮想モードについて調べてみましょう。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-08-28 00:45
CSS で 
TABLE タグに table-layout:fixed を指定。
TD タグに overflow:hidden を指定。
10カラム分全てに colgroup タグで 幅を指定する際、% では無くて px で
指定。

たぶんこれだけで半分くらいに短縮できます。
CPUパワー依存なんで。

追加:表示完了まで、display:none です。


Webじゃないのか、無駄レスごめんなさい。



[ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-08-28 00:47 ]

[ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-08-28 00:50 ]
はたけ
常連さん
会議室デビュー日: 2006/02/08
投稿数: 27
投稿日時: 2008-08-28 16:55
ありがとうございます、仮想モードで実装してみました。
何とかなりそうです。

ただ、一つ問題点が同時に発生しました。
画面に表示するのはRowCountの数で変更できますが、
表示する開始行の指定方法がわかりません。

例えば、1000件データ中、最初に500〜表示したい場合などです。
RowCount = 100
とすると、0件目から100件表示されますが、
500件〜600件を表示するのはどうすればよいのでしょうか?
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-08-28 18:20
DataGridView.FirstDisplayedScrollingRowIndexプロパティに
表示させたい行のRowIndexを設定する。
1

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