いつもお世話になっております。
StringGridで1列目〜3列目に数字が記入されており、その3列の合計を4列目に出力すると同時に、4列目の数字が大きい順に行ごと並べ替えたいと思っています。以下のように記述しているのですが、うまく並べ替えることができず、困っています。教えていただければ幸いです。どうぞよろしくお願いいたします。
var
sai:array[1..50]of integer;
a,b,c,d,e:integer;
goukeiten:integer;
begin
goukeiten:=0;
for b :=1 to 50 do //4列目に1〜3列目の合計を出力。
begin
for e:=1 to 3 do
begin
goukei:=goukei+strtointdef(stringgrid1.cells[e,b])
end;
goukei:=0;
end;
for a :=1 to 50 do //4列目の数が大きい順に並べ替える。
begin
sai[a]:=strtointdef(stringgrid1.cells[4,a],0);
end;
for d :=1 to 50 do
begin
for c:=d+1 to 50 do
begin
if sai[d]<sai[c] then
begin
stringgrid1.rows[51]:=stringgrid1.rows[d];
stringgrid1.rows[d]:=stringgrid1.rows[c];
stringgrid1.rows[c]:=stringgrid1.rows[51]
end;
end;
end;
end;
上のソースはコピペではなくて、手入力したものですか?
(一部「記述の間違い」「書き忘れ」があるので、エラーや予定外の動作になる)
基本的な方法は間違っていないので、正しく記述すれば並べ替えが出来るはずですよ。
行DATAの入れ替えの際に、作業用としてグリッドの範囲外の行を使ってるをやめて一時変数を用意した方がいいと思うけど、エラーにはならないですね。
TmpStrings := TStringList.Create; // 作業用TmpStrings
......
TmpStrings.Assign(StringGrid1.rows[d]);
StringGrid1.rows[d] := StringGrid1.rows[c];
StringGrid1.rows[c] := TmpStrings;
......
TmpStrings.Free;
これって、他のメーリングリストでも同じものを見かけてような・・・
解決してますよね。
すみません。
解決しました。ご迷惑をおかけしまして申し訳ありませんでした。
ありがとうございました。
ツイート | ![]() |