[BCB] StringGridを列を指定してソートする(バブルソート)
以下はStringGridで列を指定してソートする手続きです。1つ目の引数にはソートするStringGridを、2つ目の引数には何列目でソートするかを指定します。なお、以下の例ではデータを文字列としてソートしていますが、データを比較するif文を書き換えれば数値としてソートすることも可能です。その場合は、比較する2つデータをStrToIntなどで整数に直してから比較することになります。
void __fastcall TForm1::StringGridSort(TStringGrid *Grid, int SortCol)
{
for (int i=Grid->FixedRows;i
for (int j=Grid->RowCount-1;j>i;j--) {
if (Grid->Cells[SortCol][j-1]>Grid->Cells[SortCol][j]) {//データを比較
//2つの行を入れ替える
AnsiString TmpStr=Grid->Rows[j-1]->CommaText;
Grid->Rows[j-1]->CommaText=Grid->Rows[j]->CommaText;
Grid->Rows[j]->CommaText=TmpStr;
}
}
}
}
この手続きはバブルソートという方法を使っています。時間のかかるソート法ですので行数が多くなると固まったようになるかもしれません。
