Delphi Tips 
-----------------------------

0023  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
TStringGridのソート

 > StringGrid上に表示したデータを、ある列(Col)をKEYとしてソートし、
 > 再表示させたいのですが、どのようにしたらよいのでしょうか?

エレガントさを求めず、力わざで良ければ、

procedure TForm1.FormCreate(Sender: TObject);
var i,j:Integer;
begin
    for i:=0 to StringGrid1.ColCount-1 do
        for j:=0 to StringGrid1.RowCount-1 do
            StringGrid1.Cells[i,j]:=IntToStr(Random(100));
end;

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var c,min,i,j:Integer;
    s:string;
begin
    c:=StringGrid1.Col;
    for i:=0 to StringGrid1.RowCount-2 do begin
        min:=i;
        for j:=i+1 to StringGrid1.RowCount-1 do
            if StrToInt(StringGrid1.Cells[c, j ]) <
               StrToInt(StringGrid1.Cells[c,min]) then
                    min:=j;
        if min<>i then
            for j:=0 to StringGrid1.ColCount-1 do begin
                s:=StringGrid1.Cells[j,i];
                StringGrid1.Cells[j,i]:=StringGrid1.Cells[j,min];
                StringGrid1.Cells[j,min]:=s;
            end;
    end;
end;

としてできますが、セル数が1万を超えると速度的にチョットきつくなってきます。大きなグリッドに対してこのようなことをやりたければTListViewを使うことをお勧めします。
参照: [Delphi-ML:12259] <Additional> <コンポーネント >

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp