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を使うことをお勧めします。
|
|