안녕하세요. 쥔장입니다.
ListView 에서 ViewMode 가 Detail 일 경우 컬럼 해더를 입력할 수 있습니다.
이런식으로요.
![]()
저렇게 해서 추가를 하고 나면 마우스로 저 해더를 눌러서 오름차순/내림차순 정렬을 하고 싶을때가 있을것입니다.
그것을 구현해주는 소스 입니다.
먼저 프로젝트에 클래스 파일을 추가하고 다음을 붙여넣으세요.
Imports System.Collections
Imports System.Windows.Forms
Public Class ListViewColumnSorter
Implements System.Collections.IComparer
Private ColumnToSort As Integer
Private OrderOfSort As SortOrder
Private ObjectCompare As CaseInsensitiveComparer
Public Sub New()
ColumnToSort = 0
OrderOfSort = SortOrder.None
ObjectCompare = New CaseInsensitiveComparer()
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim compareResult As Integer
Dim listviewX As ListViewItem
Dim listviewY As ListViewItem
listviewX = CType(x, ListViewItem)
listviewY = CType(y, ListViewItem)
' Compare the two items.
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
If (OrderOfSort = SortOrder.Ascending) Then
Return compareResult
ElseIf (OrderOfSort = SortOrder.Descending) Then
Return (-compareResult)
Else
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
End Class
'-----------------------------------------------------------------------------------------------
다음은 폼의 Class 부분에 선언해주세요.
Private lvwColumnSorter As ListViewColumnSorter
'-----------------------------------------------------------------------------------------------
다음은 폼의 Load 부분에 추가해 주세요.
ListView1.View = View.Details
'-----------------------------------------------------------------------------------------------
다음은 ListView 의 ColumnClick 이벤트에 다음 코드를 붙여넣어 주세요.
If (e.Column = lvwColumnSorter.SortColumn) Then
If (lvwColumnSorter.Order = SortOrder.Ascending) Then
lvwColumnSorter.Order = SortOrder.Descending
Else
lvwColumnSorter.Order = SortOrder.Ascending
End If
Else
lvwColumnSorter.SortColumn = e.Column
lvwColumnSorter.Order = SortOrder.Ascending
End If
Me.ListView1.Sort()
'-----------------------------------------------------------------------------------------------
이렇게만 해주시면 됩니다.
단, ListView 의 Column 속성에서 Column 개체를 추가해주신후 해야겠죠?
기본적으로 있는 .Sort 속성으로는 맨 앞열만 정렬할 수 있는데
위 방법으로는 모든열이 정렬 가능합니다.
참고하세요.
* 단 위 코드는 숫자로 된 열도 문자열처럼 정렬을 합니다.
숫자로 된 열은 숫자처럼 정렬할려면 어떻게 해야될까요? 그건 숙제 입니다.