"sonu" <so************ *@yahoo.com> wrote in message
news:11******** **************@ o13g2000cwo.goo glegroups.com.. .
I have a problem regarding use of a ListviewSorter class which is used
to sort the items in the
listview.
Here is the code I use.
Enum PCOColumns
PersonID
Result
Type
EffectiveDate
SubmitDate
End Enum
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeCompo nent()
....
' Create an instance of a ListView column sorter and assign it
' to the ListView control.
lvwColumnSorter 2 = New ListViewColumnS orter
Me.lvwPCOs.List ViewItemSorter = lvwColumnSorter 2
....
End Sub
Private Sub lvwPCOs_ColumnC lick(ByVal sender As System.Object, ByVal e As
System.Windows. Forms.ColumnCli ckEventArgs) Handles lvwPCOs.ColumnC lick
Select Case e.Column
Case PCOColumns.Pers onID
lvwColumnSorter 2.SortType =
ListViewColumnS orter.enumSortT ype.NumericSort
Case PCOColumns.Subm itDate, PCOColumns.Effe ctiveDate
lvwColumnSorter 2.SortType =
ListViewColumnS orter.enumSortT ype.DateSort
Case Else
lvwColumnSorter 2.SortType =
ListViewColumnS orter.enumSortT ype.AlphaSort
End Select
' Determine if the clicked column is already the column that is
' being sorted.
If (e.Column = lvwColumnSorter 2.SortColumn) Then
' Reverse the current sort direction for this column.
If (lvwColumnSorte r2.Order = SortOrder.Ascen ding) Then
lvwColumnSorter 2.Order = SortOrder.Desce nding
Else
lvwColumnSorter 2.Order = SortOrder.Ascen ding
End If
Else
' Set the column number that is to be sorted; default to
ascending.
lvwColumnSorter 2.SortColumn = e.Column
lvwColumnSorter 2.Order = SortOrder.Ascen ding
End If
' Perform the sort with these new sort options.
Me.lvwPCOs.Sort ()
End Sub
ListViewColumnS orter.vb:
Imports System.Collecti ons
Imports System.Windows. Forms
Public Class ListViewColumnS orter
Implements System.Collecti ons.IComparer
Private ColumnToSort As Integer
Private OrderOfSort As SortOrder
Private ObjectCompare As CaseInsensitive Comparer
Private TypeOfSort As enumSortType
Enum enumSortType
AlphaSort
NumericSort
DateSort
End Enum
Public Sub New()
' Initialize the column to '0'.
ColumnToSort = 0
' Initialize the sort order to 'none'.
OrderOfSort = SortOrder.None
' Initialize the CaseInsensitive Comparer object.
ObjectCompare = New CaseInsensitive Comparer
' Initialize the default column type to be Alpha.
TypeOfSort = enumSortType.Al phaSort
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Implements IComparer.Compa re
Dim compareResult As Integer
Dim listviewX As ListViewItem
Dim listviewY As ListViewItem
' Cast the objects to be compared to ListViewItem objects.
listviewX = CType(x, ListViewItem)
listviewY = CType(y, ListViewItem)
' Compare the two items.
Select Case TypeOfSort
Case enumSortType.Al phaSort
compareResult =
ObjectCompare.C ompare(listview X.SubItems(Colu mnToSort).Text,
listviewY.SubIt ems(ColumnToSor t).Text)
Case enumSortType.Nu mericSort
Dim intx As Integer =
CInt(listviewX. SubItems(Column ToSort).Text)
Dim inty As Integer =
CInt(listviewY. SubItems(Column ToSort).Text)
If intx = inty Then
compareResult = 0
ElseIf intx > inty Then
compareResult = 1
Else
compareResult = -1
End If
Case enumSortType.Da teSort
Dim datex As Date =
Convert.ToDateT ime(listviewX.S ubItems(ColumnT oSort).Text)
Dim datey As Date =
Convert.ToDateT ime(listviewY.S ubItems(ColumnT oSort).Text)
If datex = datey Then
compareResult = 0
ElseIf datex > datey Then
compareResult = 1
Else
compareResult = -1
End If
End Select
' Calculate the correct return value based on the object
' comparison.
If (OrderOfSort = SortOrder.Ascen ding) Then
' Ascending sort is selected, return typical result of
' compare operation.
Return compareResult
ElseIf (OrderOfSort = SortOrder.Desce nding) Then
' Descending sort is selected, return negative result of
' compare operation.
Return (-compareResult)
Else
' Return '0' to indicate that they are equal.
Return 0
End If
End Function
Public Property SortColumn() As Integer
Set(ByVal Value As Integer)
ColumnToSort = Value
End Set
Get
Return ColumnToSort
End Get
End Property
Public Property Order() As SortOrder
Set(ByVal Value As SortOrder)
OrderOfSort = Value
End Set
Get
Return OrderOfSort
End Get
End Property
Public Property SortType() As enumSortType
Get
Return TypeOfSort
End Get
Set(ByVal Value As enumSortType)
TypeOfSort = Value
End Set
End Property
End Class
Greg