Edit this page

Implement Custom Sorting

By default, RadListBox sorts items by their Text property. This article will show you how to implement custom sorting - the items will be sorted by their Value property.

For this purpose, we will use the IComparer interface which exposes a method that compares two objects.

Here are the two steps that you need to perform:

  • Create a class that implements IComparer for your custom sorting:

public class SortListBoxItemsByValue : IComparer
{
    public int Compare(object x, object y)
    {
        RadListBoxItem p1 = new RadListBoxItem();
        RadListBoxItem p2 = new RadListBoxItem();
        if (x is RadListBoxItem)
            p1 = x as RadListBoxItem;
        else
            throw new ArgumentException("Object is not of type RadListBoxItem.");
        if (y is RadListBoxItem)
            p2 = y as RadListBoxItem;
        else
            throw new ArgumentException("Object is not of type RadListBoxItem.");
        int cmp = 0;
        if (p1.ListBox.Sort == RadListBoxSort.Ascending)
        {
            //here we compare the Values of the items
            cmp = String.Compare(p1.Value, p2.Value, !p1.ListBox.SortCaseSensitive);
        }
        if (p1.ListBox.Sort == RadListBoxSort.Descending)
        {
            //here we compare the Values of the items
            cmp = String.Compare(p1.Value, p2.Value, !p1.ListBox.SortCaseSensitive) * -1;
        }
        return cmp;
    }
}


Public Class SortListBoxItemsByValue
    Implements IComparer
    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
        Dim p1 As New RadListBoxItem()
        Dim p2 As New RadListBoxItem()
        If TypeOf x Is RadListBoxItem Then
            p1 = TryCast(x, RadListBoxItem)
        Else
            Throw New ArgumentException("Object is not of type RadListBoxItem.")
        End If
        If TypeOf y Is RadListBoxItem Then
            p2 = TryCast(y, RadListBoxItem)
        Else
            Throw New ArgumentException("Object is not of type RadListBoxItem.")
        End If
        Dim cmp As Integer = 0
        If p1.ListBox.Sort = RadListBoxSort.Ascending Then
            'here we compare the Values of the items
            cmp = [String].Compare(p1.Value, p2.Value, Not p1.ListBox.SortCaseSensitive)
        End If
        If p1.ListBox.Sort = RadListBoxSort.Descending Then
            'here we compare the Values of the items
            cmp = [String].Compare(p1.Value, p2.Value, Not p1.ListBox.SortCaseSensitive) * -1
        End If
        Return cmp
    End Function
End Class

  • Call the overloaded Items.Sort methods passing your IComparer as a parameter:

RadListBox1.Sort = RadListBoxSort.Ascending;
RadListBox1.Items.Sort(new SortListBoxItemsByValue());


RadListBox1.Sort = RadListBoxSort.Ascending
RadListBox1.Items.Sort(New SortListBoxItemsByValue())

That's it. Now the ListBox items will be sorted by their Value instead of Text property.

Is this article helpful? No Yes
Thank you for your feedback!

Give article feedback

Tell us how we can improve this article

close
Dummy