본문 바로가기

VB

[vb.net] Listview 정렬하기 (오름차순 내림차순)

보통 listview는 자체적으로 sort를 통하여 none과 오룸, 내림순으로 정렬할 수 있다.

하지만 sort에 none이 아닌 다른설정을 주게된다면.. 사용자 임의로 리스트 재정렬(?)을 할 수 없다.

즉, 값이 바뀔때마다 계속 listview는 아이템을 sort해준다.


필요에따라 위치를 변경 할 수 있게끔 자동 sort를 대체할만한 메서드를 만들어보았다.



    Public Sub ListViewSort(ByRef lv As ListView, ByVal col As Integer, ByVal AceDec As Boolean)

        Dim lvTempItem As ListViewItem

        Dim i As Integer

        If AceDec Then

            For i = 0 To lv.Items.Count - 2 

                If CStr(lv.Items(i).SubItems(col).Text) > CStr(lv.Items(i + 1).SubItems(col).Text) Then

                    lvTempItem = lv.Items(i)

                    lv.Items(i).Remove()

                    lv.Items.Insert((i + 1), lvTempItem)

                    i = -1

                End If

            Next i

        Else

            For i = 0 To lv.Items.Count - 2 

                If CStr(lv.Items(i).SubItems(col).Text) < CStr(lv.Items(i + 1).SubItems(col).Text) Then

                    lvTempItem = lv.Items(i)

                    lv.Items(i).Remove()

                    lv.Items.Insert((i + 1), lvTempItem)

                    i = -1

                End If

            Next i

        End If

    End Sub


사용법은 아래와 같다.


 ListViewSort(byref 정렬할listview,byval 정렬을 기준할 칼럼번호,byval 1은 오름차순, 그외 내림차순)


그후 반드시 해당 리스트뷰를 refresh해주는것을 추천한다,.