List viewのカラムにソート機能をつけました。list view item/subitemに追加しているのはStringの値です。ソートを昇順にするとitemに数値の文字列がはいっていると正しくソートされません。数値の値がはいっているので当たり前のことですが、何か対処方法をごぞんじでしょうか。
おしえてください。
例
1
2
3
11
とitemにはいているとそーとすると
1
11
2
3
となる。
1の後に11が来るのは、文字列ソートの仕様です。頭の文字を1文字ずつ順に比較してソートするので、どうしても11が二番目に来てしまいます。
ということで、IComparerの比較メソッドをオーバーライドして、自分に都合のいいソートメソッドを作ればよいでしょう。
http://dobon.net/vb/dotnet/programing/icomparer.html
下のコードは適当に書いたものなので、ヒント程度で使ってください。
Public Class MyComparer Implements System.Collections.IComparer 'x<y: <0 | x>y: >0 | x=y: 0 Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare If IsNumber(x) And IsNumber(y) Then Compare=Int(x) - Int(y) Else If x<y Then Compare=-1 ElseIf x>y Then Compare=1 Else Compare=0 EndIf EndIf End Function
ListView コントロールに独自のソート方法を定義するためには、IComparer を実装した比較のための独自のクラスが必要になります。
http://smdn.invisiblefulmoon.net/ikimasshoy/vbdotnet/comparison....
を参考にすれば解決できるかと思います。
正しくソートされないと質問にあるが、質問のとおりが正しいソートなのです。
つまり、リストを使う限り避けられないことなのです。
これを数値順にソートさせたいならば 桁数をそろえないとダメです。
つまり、最大桁数が2桁ならば、2桁にしないとダメです。
1
11
2
3
は
01
11
02
03
として入れてあげれば
01
02
03
11
となります。
これがいやならば、listは、つかわず別の方法をとるべきです。
コメント(0件)