大量のデータをStringGridに表示するには?


さすらいのプログラマー  2009-09-30 12:01:50  No: 35787  IP: 192.*.*.*

お世話になります。
早速ですが、タイトルどおり大量のデータをTStringGridで表示
したいのですが、どうすればよいでしょうか?

行数は約20万行で、項目数は28項目いずれも文字列です。

編集 削除
monaa  2009-09-30 13:11:32  No: 35788  IP: 192.*.*.*

とりあえずチェックしてみてください。
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/01383.html

編集 削除
HOta  2009-10-01 07:32:43  No: 35789  IP: 192.*.*.*

何が問題なのですか?
ただ、20万行表示は現実的では有りません。
ロジックを変えることをお勧めします。

編集 削除
manbon  2009-10-01 08:49:59  No: 35790  IP: 192.*.*.*

行数20万、列数28で以下をやってみると、
1分ほど掛かりましたが、エラーは出ずに正常に動作しましたが・・・

var
  iR, iC: integer;
begin
  StringGrid1.Hide;
  Application.ProcessMessages;

  for iR := 0 to Pred(StringGrid1.RowCount) do begin
  for iC := 0 to Pred(StringGrid1.ColCount) do begin
    StringGrid1.Cells[iC, iR] := Format('%.2d', [iC]) + ',' + Format('%.6d', [iR]);
  end;
  end;

  StringGrid1.Show;
end;

編集 削除
SendMessage  2009-10-01 13:58:08  No: 35791  IP: 192.*.*.*

Hide→Showに変わりいかがですか?

begin
  SendMessage(StringGrid1.Handle, WM_SETREDRAW, 0, 0);

  {Gridにデータを設定}

  SendMessage(StringGrid1.Handle, WM_SETREDRAW, 1, 0);
  StringGrid1.Repaint;
end;

編集 削除
manbon  2009-10-01 15:24:52  No: 35792  IP: 192.*.*.*

>SendMessageさん

こういう方法もあるんですね。勉強になります。
時間は両者とも変わりはありませんでした。

グリッドの下にラベル(「しばらくお待ちください」と書いています)を置いて、
Hideを行うと、ユーザーに処理が分かりやすいため、この方法を多用しています。

編集 削除
けど  2009-10-01 20:24:19  No: 35793  IP: 192.*.*.*

try
  Hide;
  ……
finally
  Show;
end;
して欲しいです

編集 削除