Initial population
This commit is contained in:
217
clsGridSorter.vb
Normal file
217
clsGridSorter.vb
Normal file
@@ -0,0 +1,217 @@
|
||||
Imports System.Windows.Forms
|
||||
|
||||
Public Class clsGridSorter : Implements IComparer
|
||||
Dim mintColumnIndexToSort As Integer
|
||||
Dim mobjGridColumnSortRules() As clsGridColumnSortRule
|
||||
|
||||
Public Sub New()
|
||||
mintColumnIndexToSort = 0
|
||||
End Sub
|
||||
|
||||
Public Sub New(ByVal lintInputColumnToSort As Integer)
|
||||
mintColumnIndexToSort = lintInputColumnToSort
|
||||
End Sub
|
||||
|
||||
Public Sub New(ByVal lintInputColumnToSort As Integer, ByVal lobjGridColumnSortRules As clsGridColumnSortRule())
|
||||
mintColumnIndexToSort = lintInputColumnToSort
|
||||
mobjGridColumnSortRules = lobjGridColumnSortRules
|
||||
End Sub
|
||||
|
||||
Public Property ColumnIndexToSort() As Integer
|
||||
Get
|
||||
Return mintColumnIndexToSort
|
||||
End Get
|
||||
Set(ByVal iValue As Integer)
|
||||
mintColumnIndexToSort = iValue
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Property ColumnSortRules() As clsGridColumnSortRule()
|
||||
Get
|
||||
Return mobjGridColumnSortRules
|
||||
End Get
|
||||
Set(ByVal iValue As clsGridColumnSortRule())
|
||||
mobjGridColumnSortRules = iValue
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
|
||||
Dim row1 As ListViewItem
|
||||
Dim row2 As ListViewItem
|
||||
Dim lintReturnValue As Integer
|
||||
|
||||
row1 = CType(x, ListViewItem)
|
||||
row2 = CType(y, ListViewItem)
|
||||
|
||||
If mintColumnIndexToSort > row1.SubItems.Count Then
|
||||
Return -1
|
||||
End If
|
||||
If mobjGridColumnSortRules Is Nothing _
|
||||
OrElse mintColumnIndexToSort >= mobjGridColumnSortRules.Length Then
|
||||
'Default to string comparison
|
||||
Dim s1 As String = row1.SubItems(0).Text
|
||||
Dim s2 As String = row2.SubItems(0).Text
|
||||
Return String.Compare(s1, s2)
|
||||
End If
|
||||
Select Case mobjGridColumnSortRules(mintColumnIndexToSort).SortType
|
||||
Case clsGridColumnSortRule.enumSortType.SortAsNumber
|
||||
Dim ldblValue1 As Double = Val(row1.SubItems(mintColumnIndexToSort).Text)
|
||||
Dim ldblValue2 As Double = Val(row2.SubItems(mintColumnIndexToSort).Text)
|
||||
lintReturnValue = CompareDouble(ldblValue1, ldblValue2)
|
||||
If lintReturnValue = 0 Then
|
||||
lintReturnValue = CompareSubColumns(row1, row2, Me.mobjGridColumnSortRules(mintColumnIndexToSort).SubColumnSort)
|
||||
End If
|
||||
Return lintReturnValue
|
||||
Case clsGridColumnSortRule.enumSortType.SortAsString
|
||||
Dim lstrValue1 As String = row1.SubItems(mintColumnIndexToSort).Text
|
||||
Dim lstrValue2 As String = row2.SubItems(mintColumnIndexToSort).Text
|
||||
lintReturnValue = CompareString(lstrValue1, lstrValue2)
|
||||
If lintReturnValue = 0 Then
|
||||
lintReturnValue = CompareSubColumns(row1, row2, Me.mobjGridColumnSortRules(mintColumnIndexToSort).SubColumnSort)
|
||||
End If
|
||||
Return lintReturnValue
|
||||
Case Else 'No Sort here - go to subcolumn sorts, if any
|
||||
lintReturnValue = CompareSubColumns(row1, row2, Me.mobjGridColumnSortRules(mintColumnIndexToSort).SubColumnSort)
|
||||
Return lintReturnValue
|
||||
End Select
|
||||
|
||||
Return 0
|
||||
End Function
|
||||
|
||||
Private Function CompareString(ByVal lstrString1 As String, ByVal lstrString2 As String) As Integer
|
||||
Return String.Compare(lstrString1, lstrString2)
|
||||
End Function
|
||||
|
||||
Private Function CompareDouble(ByVal ldblDouble1 As Double, ByVal ldblDouble2 As Double) As Integer
|
||||
If ldblDouble1 < ldblDouble2 Then
|
||||
Return -1
|
||||
Else
|
||||
If ldblDouble2 < ldblDouble1 Then
|
||||
Return 1
|
||||
Else
|
||||
Return 0
|
||||
End If
|
||||
End If
|
||||
End Function
|
||||
|
||||
Private Function CompareSubColumns(ByVal row1 As ListViewItem, ByVal row2 As ListViewItem, ByVal lobjSubColumnSort As clsGridSubColumnSortRule) As Integer
|
||||
Dim lintReturnValue As Integer
|
||||
|
||||
If lobjSubColumnSort Is Nothing Then
|
||||
Return 0
|
||||
Else
|
||||
If lobjSubColumnSort.ColumnIndex > row1.SubItems.Count Then
|
||||
Return -1
|
||||
End If
|
||||
Select Case lobjSubColumnSort.SortType
|
||||
Case clsGridSubColumnSortRule.enumSortType.SortAsNumber
|
||||
Dim ldblValue1 As Double = Val(row1.SubItems(lobjSubColumnSort.ColumnIndex).Text)
|
||||
Dim ldblValue2 As Double = Val(row2.SubItems(lobjSubColumnSort.ColumnIndex).Text)
|
||||
lintReturnValue = CompareDouble(ldblValue1, ldblValue2)
|
||||
If lintReturnValue = 0 Then
|
||||
lintReturnValue = CompareSubColumns(row1, row2, lobjSubColumnSort.SubColumnSortRule)
|
||||
End If
|
||||
Return lintReturnValue
|
||||
Case clsGridSubColumnSortRule.enumSortType.SortAsString
|
||||
Dim lstrValue1 As String = row1.SubItems(lobjSubColumnSort.ColumnIndex).Text
|
||||
Dim lstrValue2 As String = row2.SubItems(lobjSubColumnSort.ColumnIndex).Text
|
||||
lintReturnValue = CompareString(lstrValue1, lstrValue2)
|
||||
If lintReturnValue = 0 Then
|
||||
lintReturnValue = CompareSubColumns(row1, row2, lobjSubColumnSort.SubColumnSortRule)
|
||||
End If
|
||||
Return lintReturnValue
|
||||
Case Else 'No Sort here - go to subcolumn sorts, if any
|
||||
lintReturnValue = CompareSubColumns(row1, row2, lobjSubColumnSort.SubColumnSortRule)
|
||||
Return lintReturnValue
|
||||
End Select
|
||||
End If
|
||||
End Function
|
||||
End Class
|
||||
Public Class clsGridColumnSortRule
|
||||
Public Enum enumSortType
|
||||
SortAsString
|
||||
SortAsNumber
|
||||
SortNone
|
||||
End Enum
|
||||
Private menumSortType As enumSortType
|
||||
Private mobjSubColumnSort As clsGridSubColumnSortRule
|
||||
|
||||
Public Sub New()
|
||||
menumSortType = enumSortType.SortAsString
|
||||
End Sub
|
||||
|
||||
Public Sub New(ByVal lenumSortType As enumSortType)
|
||||
menumSortType = lenumSortType
|
||||
End Sub
|
||||
|
||||
Public Property SortType() As enumSortType
|
||||
Get
|
||||
Return menumSortType
|
||||
End Get
|
||||
Set(ByVal iValue As enumSortType)
|
||||
menumSortType = iValue
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Property SubColumnSort() As clsGridSubColumnSortRule
|
||||
Get
|
||||
Return mobjSubColumnSort
|
||||
End Get
|
||||
Set(ByVal iValue As clsGridSubColumnSortRule)
|
||||
mobjSubColumnSort = iValue
|
||||
End Set
|
||||
End Property
|
||||
End Class
|
||||
|
||||
Public Class clsGridSubColumnSortRule
|
||||
Public Enum enumSortType
|
||||
SortAsString
|
||||
SortAsNumber
|
||||
End Enum
|
||||
|
||||
Private menumSortType As enumSortType
|
||||
Private mintColumnIndex As Integer
|
||||
Private mobjSubColumnSortRule As clsGridSubColumnSortRule
|
||||
|
||||
Public Sub New(ByVal lintColumnIndex As Integer)
|
||||
mintColumnIndex = lintColumnIndex
|
||||
menumSortType = enumSortType.SortAsString
|
||||
End Sub
|
||||
Public Sub New(ByVal lintColumnIndex As Integer, ByVal lobjSubColumnSortRule As clsGridSubColumnSortRule)
|
||||
mintColumnIndex = lintColumnIndex
|
||||
mobjSubColumnSortRule = lobjSubColumnSortRule
|
||||
menumSortType = enumSortType.SortAsString
|
||||
End Sub
|
||||
Public Sub New(ByVal lintColumnIndex As Integer, ByVal lenumSortType As enumSortType, ByVal lobjSubColumnSortRule As clsGridSubColumnSortRule)
|
||||
mintColumnIndex = lintColumnIndex
|
||||
mobjSubColumnSortRule = lobjSubColumnSortRule
|
||||
menumSortType = lenumSortType
|
||||
End Sub
|
||||
|
||||
Public Property ColumnIndex() As Integer
|
||||
Get
|
||||
Return mintColumnIndex
|
||||
End Get
|
||||
Set(ByVal iValue As Integer)
|
||||
mintColumnIndex = iValue
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Property SortType() As enumSortType
|
||||
Get
|
||||
Return menumSortType
|
||||
End Get
|
||||
Set(ByVal iValue As enumSortType)
|
||||
menumSortType = iValue
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Property SubColumnSortRule() As clsGridSubColumnSortRule
|
||||
Get
|
||||
Return mobjSubColumnSortRule
|
||||
End Get
|
||||
Set(ByVal iValue As clsGridSubColumnSortRule)
|
||||
mobjSubColumnSortRule = iValue
|
||||
End Set
|
||||
End Property
|
||||
End Class
|
||||
Reference in New Issue
Block a user