人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

おしえてください。


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

●質問者: mai_mai_mail
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:String view カラム ソート プログラム
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● haruo-31
●50ポイント

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

2 ● tarutatta
●50ポイント

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

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

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


3 ● きゃづみぃ
●0ポイント

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

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

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

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

1

11

2

3

01

11

02

03

として入れてあげれば

01

02

03

11

となります。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ