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


さすらいのプログラマー  2009-09-30 21:01:50  No: 35787

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

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


monaa  2009-09-30 22:11:32  No: 35788

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


HOta  2009-10-01 16:32:43  No: 35789

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


manbon  2009-10-01 17:49:59  No: 35790

行数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 22:58:08  No: 35791

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

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

  {Gridにデータを設定}

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


manbon  2009-10-02 00:24:52  No: 35792

>SendMessageさん

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

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


けど  2009-10-02 05:24:19  No: 35793

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加