Listbox - How do I sort?

  • Thread starter Jason P Opdycke [MSFT]
  • Start date
J

Jason P Opdycke [MSFT]

Hello All -

I have 2 list boxes. Items in Left list box populated from a DB. I remove
an item from the left box and add an item to the right box to allow user
selection. When that item is removed again, the item is in the bottom of
the listbox on the left.

Here is the remove code snippet.... How do I sort to original alphabetical
state when the item is removed?

Dim list As New ArrayList

For Each item As ListItem In lstDest.Items

If item.Selected Then

lstSource.Items.Add(item)

list.Add(item)

End If

Next

For Each item As ListItem In list

If item.Selected Then

lstDest.Items.Remove(item)

End If

Next



Thanks to ALL
 
J

Joe Fallon

I had the same issue so I wrote this code to make it work:
====================================================
This Enum is used to define which kind of comparison you need to make. (I
only built the two that I need so far but once you see how to do it you can
easilt extend it.)

Public Enum ListBoxComparer
[String]
[Decimal]
End Enum
====================================================
As part of a Shared class you could have variables like these and a
SortListbox method:

Private Shared mList As New ArrayList
Private Shared i As Integer
Private Shared mItem As ListItem

Public Shared Sub SortListBox(ByRef mylistbox As ListBox, ByVal Ascending
As Boolean, ByVal ListBoxComparer As ListBoxComparer)
mList.Clear()

'We don't want any selected items to exist in the listbox. Problem
exists when more than 1 item is Selected.
mylistbox.ClearSelection()

For Each mItem In mylistbox.Items
mList.Add(mItem)
Next

If ListBoxComparer = ListBoxComparer.String Then
mList.Sort(New ListBoxStringComparer)
ElseIf ListBoxComparer = ListBoxComparer.Decimal Then
mList.Sort(New ListBoxDecimalComparer)
End If

mylistbox.Items.Clear()

If Ascending = True Then
For i = 0 To mList.Count - 1
mylistbox.Items.Add(CType(mList(i), ListItem))
Next
Else
For i = mList.Count - 1 To 0 Step -1
mylistbox.Items.Add(CType(mList(i), ListItem))
Next
End If

End Sub
================================================
These comparer classes can be stored in one of your libraries:

Public Class ListBoxStringComparer
Implements IComparer

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Implements System.Collections.IComparer.Compare
'compare 2 ListItem values using their Text property
Return String.Compare(CType(x, ListItem).Text, CType(y,
ListItem).Text)
End Function

End Class
====================================================
Public Class ListBoxDecimalComparer
Implements IComparer

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Implements System.Collections.IComparer.Compare
'compare 2 ListItem values using their Value property
Return Decimal.Compare(CDec(CType(x, ListItem).Value), CDec(CType(y,
ListItem).Value))
End Function

End Class

====================================================

--
Joe Fallon
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top