■69010 / inTopicNo.2) |
Re[1]: flexgridのソート方法がわかりません。 |
□投稿者/ 魔界の仮面弁士 (440回)-(2013/11/28(Thu) 14:03:39)
|
■No69006 (まおまお さん) に返信 > .Sort のヘルプにて Web のオンラインヘルプを見た感じだと、5 つのオーバーロードがあるようですね。 Sort(IComparer) Sort(SortFlags, CellRange) Sort(SortFlags, Int32) Sort(Int32, Int32, IComparer) Sort(SortFlags, Int32, Int32)
> System.Collections.ICompare comparer が比較子だと思うのですが 惜しい。微妙にスペルミス。正しくは System.Collections.IComparer (の Compare メソッド) ですね。
IComparer.Compare メソッドは、「int Compare(object x, object y)」という 定義になっています。引数からは 2 つのデータが受け取れるので、開発者は ・x < y なら、戻り値として負数を返す。 ・x = y なら、戻り値としてゼロを返す。 ・x > y なら、戻り値として正数を返す。 ような実装をすることで、呼び出し元に並び順を伝えるという仕組みです。
下記に IComparer を用いた実装例があります。 (FlexGrid 向けのものではなく)string のコレクションを並び替えるサンプルです。 http://dobon.net/vb/dotnet/programing/icomparer.html http://dobon.net/vb/dotnet/string/stringcomparer.html
で、FlexGrid 向けに実装するには、
(1) IComparer インターフェイスを実装したクラスを作成する。 → class Hoge : IComparer { … } な感じで。
(2) それの Compare メソッドで、大小比較のコードを記述する。 → 比較結果に応じて、-1・0・+1 のいずれかを戻り値として返すよう実装する。
(3) 作成したクラスのインスタンスを、Sort メソッドの引数に渡す。 → c1FlexGrid.Sort(new Hoge());
という流れになるとなると思います。
私自身は C1FlexGrid を使ったことはありませんが、おそらくは IComparer.Compare メソッドに Row オブジェクトが 2 つ渡されるので、 両行の「2 列目」同士の内容を比較すれば良いでしょう。比較してみて、 その大小結果を 負数/正数 で返し、同じだったらさらに 3 列目も比較して 同様に大小結果を負数/正数で返す(完全一致なら 0 を返す)ようにします。
> flexgridのソートの方法がわかりません。 ここでいう flexgrid とは、 MSFlexGrid とか MSHFlexGrid とか VSFlexGrid とかのことではなく、 C1FlexGrid のことですね。
|
|