VB2005でプログラムを書いています。

List viewのカラムにソート機能をつけました。list view item/subitemに追加しているのはStringの値です。ソートを昇順にするとitemに数値の文字列がはいっていると正しくソートされません。数値の値がはいっているので当たり前のことですが、何か対処方法をごぞんじでしょうか。

おしえてください。





11
とitemにはいているとそーとすると
1
11
2
3
となる。

回答の条件
  • 1人2回まで
  • 登録:2008/03/25 00:21:13
  • 終了:2008/03/27 11:18:13

回答(3件)

id:haruo-31 No.1

haruo-31回答回数80ベストアンサー獲得回数102008/03/25 01:36:56

ポイント50pt

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
id:tarutatta No.2

tarutatta回答回数20ベストアンサー獲得回数02008/03/25 01:04:13

ポイント50pt

ListView コントロールに独自のソート方法を定義するためには、IComparer を実装した比較のための独自のクラスが必要になります。

http://smdn.invisiblefulmoon.net/ikimasshoy/vbdotnet/comparison....

を参考にすれば解決できるかと思います。

id:taknt No.3

きゃづみぃ回答回数13537ベストアンサー獲得回数11982008/03/25 21:46:03

正しくソートされないと質問にあるが、質問のとおりが正しいソートなのです。

つまり、リストを使う限り避けられないことなのです。

これを数値順にソートさせたいならば 桁数をそろえないとダメです。

つまり、最大桁数が2桁ならば、2桁にしないとダメです。

1

11

2

3

01

11

02

03

として入れてあげれば

01

02

03

11

となります。

これがいやならば、listは、つかわず別の方法をとるべきです。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません