TListViewのItemをソートする3方法[Vcl]

TListViewのソート方法については、ヘルプのコード例を見てもいまいち分からなかったので整理してみる。(Style:vsReportの場合)。
まだ正確に把握しきってない可能性はあるが…。

まず、ListViewでは以下の3方法のSortが可能。
 stText…いわゆる文字列ソート。ListItemのCaption順にソートする
 stData…ListItemに格納されたDataを比較する
 stBoth…上記両方でソート(たぶん)

1.stSort

これは単純。TListViewのSotrTypeプロパティにstTextを指定するだけ。コードを書く必要はない。

2.stData

こっちは、事前にListItemのDataプロパティに何かの値をセットしておく必要がある。
たとえばクラスのポインタとか。

実例として、各ItemのDataが、intメンバを持つクラスのポインタを保有している場合。(エラー処理は省略)

Compoare値が0より大きいか小さいか、でソート順が決まる。

3.stBoth

ここがちょっと分かりにくいパターン。
基本的に、まずデータを比較し、同じ場合はTextを比較するという手順を踏む(たぶん)
コード例。

4.実行時にTSortTypeを変えたい場合

アプリケーションのオプション設定等でSortTypeを変更したい場合は、ちょっと面倒。
ここで気になるのがListViewのOnCompareイベントの引数
 int Data
とは何だろうってこと。
ヘルプをざっと見た限りだと、こういう事らしい。
 Data == 0 なら、stTextかstNone
 Data != 0 なら、stDataかstBoth

ということで、仮に実行時にSortTypeを変更し、反映したい場合は、以下のようなコードになるはず。

うーん、このコードだと、そもそも引数のDataを利用する必要がないような…。
もっとスマートな方法がある気がする。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です