Forums Neueste Beiträge
 

Sortierung im ListView langsam

22/01/2008 - 21:24 von Uwe Sauerbrey | Report spam
Hi all !

Ich habe einen eigenen Sortierer für ein ListView definiert. Dazu habe ich
mir das Beispiel aus der Hilfe kopiert und etwas "angefasst". Der dort
vorgeschlagene String-Vergleich sortiert Zahlen nàmlich nicht besonders gut.
Ich prüfe also vor dem Vergleich, ob beide Textelemente integer-Werte
enthalten und wenn ja, vergleiche ich die integer. Allerdings leidet die
performance erheblich.
Vermutlich ist mein Prüfung auf integer in einem TRY-CATCH-Block Müll. Hat
jemand einen besseren Tipp?

kurze Erlàuterung: New ist 3x überladen. Das Argument Order enthàlt entweder
1 oder -1, je nachdem, ob der Benutzer zum 2. Mal auf die gleiche Spalte
geklickt hat.

<snip...

Class ListViewItemComparer
Implements IComparer
Private col As Integer
Private Ord As Integer
Public Sub New()
col = 0
Ord = 1
End Sub
Public Sub New(ByVal column As Integer)
col = column
Ord = 1
End Sub
Public Sub New(ByVal column As Integer, ByVal Order As Integer)
col = column
ord = Order
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As
Integer _
Implements IComparer.Compare
Dim li_a, li_b As Integer

Try
li_a = CInt(CType(x, ListViewItem).SubItems(col).Text)
li_b = CInt(CType(y, ListViewItem).SubItems(col).Text)
If li_a = li_b Then Return 0
If li_a > li_b Then Return 1 * Ord
If li_a < li_b Then Return -1 * Ord
Catch ex As Exception
Try
Return ([String].Compare(CType(x,
ListViewItem).SubItems(col).Text, CType(y,
ListViewItem).SubItems(col).Text)) * Ord
Catch ex2 As Exception
Return 0
End Try
End Try
End Function
End Class

...snip>

Danke!
Uwe
 

Lesen sie die antworten

#1 Peter Fleischer
22/01/2008 - 21:31 | Warnen spam
"Uwe Sauerbrey" schrieb im Newsbeitrag
news:uNEA$

Vermutlich ist mein Prüfung auf integer in einem TRY-CATCH-Block Müll. Hat
jemand einen besseren Tipp?
...
Try
li_a = CInt(CType(x, ListViewItem).SubItems(col).Text)
...



Hi Uwe,
anstelle CInt sollte das Integer.TryParse eingesetzt werden.

Viele Gruesse

Peter

Ähnliche fragen