StringGridの並べ替えをするには?

解決


shige  2007-01-23 07:56:54  No: 24557

いつもお世話になっています.
StringGridの並べ替えを行いたいです.
取り敢えず,下記のやりかたで出来ているのですが,
URL:https://www.petitmonte.com/bbs/answers?question_id=980
数値(正負)の場合,並び替えが上手く出来ません.
原因としては,StringListで並び替えているからだと思われます.
他に良い方法はありませんか?
かなりDelphi初心者です.宜しくお願いします.


shige  2007-01-23 08:49:35  No: 24558

StringGridを並び替えている関数です.
引数1:StringGrid名,引数2:優先する列
Procedure GridSort(Grid: TStringGrid; SortCol: Integer);
var
  str_St1: TStringList;
  str_St2:  TStringList;
  int_i: Integer;
begin

  str_St1 := TStringList.Create;
  str_St1.Assign(Grid.Cols[SortCol]);

  for int_i := 1 To Grid.FixedRows Do
  str_St1.Delete(0);

  for int_i := 0 to str_St1.Count - 1 do
  str_St1.Strings[int_i] := str_St1.Strings[int_i] + #1 + Format('%.10d',[int_i]);

  for int_i := Grid.FixedRows to Grid.RowCount - 1 do begin
  str_St2 := TStringList.Create;
  str_St2.Assign(Grid.Rows[int_i]);
  str_St1.Objects[int_i - Grid.FixedRows] := str_St2;
  end;

  str_St1.Sort;

  for int_i := Grid.FixedRows to Grid.RowCount - 1 do begin
  Grid.Rows[int_i].Assign(TStringList(str_St1.Objects[int_i - Grid.FixedRows]));
  TStringList(str_St1.Objects[int_i - Grid.FixedRows]).Free;
  end;

  str_St1.Free;

end;

StringGridの中身を以下のように並び替えたいです.優先列を1列目にする.
<並び替え前>
 [-2] [A]
 [ 2] [D]
 [-1] [B]
 [ 1] [C]

<並び替え後>
 [-2] [A]
 [-1] [B]
 [ 1] [C]
 [ 2] [D]

宜しくお願いします.


TS  2007-01-23 16:59:14  No: 24559

色々方法はあるでしょうが
数字を文字に変換する時
マイナスの時は−を取り
プラスの時は100000をプラスするとかではどうでしょうか
-2 -> 2, 2 -> 100002


shige  2007-01-24 10:12:59  No: 24560

TSさん解答ありがとうございます.
これでは以下のような場合,上手くいきません.
<並び替え前>
[-2] [A]
[-1] [B]
[ 0] [C]
[ 1] [D]
[ 2] [E]

<負は−を取り,0以上は10を足す作業を行う>
[ 2] [A]
[ 1] [B]
[10] [C]
[11] [D]
[12] [E]

<並び替える>
[ 1] [B]
[ 2] [A]
[10] [C]
[11] [D]
[12] [E]

<値を元に戻す>
[-1] [B] ←-2の方が小さいはずなのに
[-2] [A] ←上手くいかない.
[ 0] [C]
[ 1] [D]
[ 2] [E]

他に上手い方法はありませんか?
宜しくお願いします.


shige  2007-01-24 10:34:45  No: 24561

自分なりに考えて,以下の手法で取り敢えず解決しました.
数字を文字に変換する時
マイナスの時は−を取って,(10-マイナスを取った値)とする.
プラスの時は10をプラスする
-2 -> 8, 2 -> 12
この値で並び替えて使用することにしました.
ありがとうございました.


TS  2007-01-24 17:27:53  No: 24562

既に解決済ですが
マイナスになる数字の範囲が判っていれば
全ての数に+100000とかしてもいいかも
-1 ->99999 -2 ->99998 1 ->100001
とにかく文字にした時どう並び替えられるかが問題です。


shige  2007-01-24 22:11:54  No: 24563

丁寧な回答ありがとうございました.
これも参考にもう一度検討してみます.
ありがとうございました.


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

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






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