StringGridでの行の入れ替えを行うには?

解決


小夏  2004-09-03 09:14:32  No: 10780

いつもお世話になっております。
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;


ソースはコピペで  2004-09-03 20:20:48  No: 10781

上のソースはコピペではなくて、手入力したものですか?
(一部「記述の間違い」「書き忘れ」があるので、エラーや予定外の動作になる)
基本的な方法は間違っていないので、正しく記述すれば並べ替えが出来るはずですよ。
行DATAの入れ替えの際に、作業用としてグリッドの範囲外の行を使ってるをやめて一時変数を用意した方がいいと思うけど、エラーにはならないですね。

  TmpStrings := TStringList.Create;  // 作業用TmpStrings
    ......
      TmpStrings.Assign(StringGrid1.rows[d]);
      StringGrid1.rows[d] := StringGrid1.rows[c];
      StringGrid1.rows[c] := TmpStrings;
    ......
  TmpStrings.Free;


Syake  2004-09-03 20:32:23  No: 10782

これって、他のメーリングリストでも同じものを見かけてような・・・
解決してますよね。


小夏  2004-09-04 07:54:34  No: 10783

すみません。
解決しました。ご迷惑をおかけしまして申し訳ありませんでした。
ありがとうございました。


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

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






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