2013-08-08 4 views
1

listview1_columnclick을 사용하지 않고 vb.net 2008을 사용하여 listview에서 데이터를 정렬하는 방법은 무엇입니까?vb.net 2008을 사용하여 listview에서 정렬?

여기 내 코드가 있는데 제대로 정렬되지 않습니다.

 If ListView1.Sorting = SortOrder.Ascending Then 
     ListView1.Sorting = SortOrder.Descending 
     Else 
     ListView1.Sorting = SortOrder.Ascending 
     End If 

답장을 보내 주셔서 감사합니다.

-jane

+0

더블 질문 ; http://stackoverflow.com/questions/1548312/sorting-a-listview-by-column – Lectere

답변

1

정렬을 수행하는 방법을 ListView에 알려줘야합니다. C#에서

:

는 비교 자 만들기 :

// Implements the manual sorting of items by columns. 
class ListViewItemComparer : IComparer 
{ 
    private int col; 
    public ListViewItemComparer() 
    { 
     col = 0; 
    } 
    public ListViewItemComparer(int column) 
    { 
     col = column; 
    } 
    public int Compare(object x, object y) 
    { 
     return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); 
    } 
} 

을 그리고 호출하여 정렬을 호출 :

colNum 당신이 원하는 컬럼의 인덱스
this.listView1.ListViewItemSorter = new ListViewItemComparer(colNum); 

종류. http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columnclick.aspx

을 그리고 여기 VB.net에서 해결책 :

예는 여기에서 가져온 호출하여 정렬을

' Implements the manual sorting of items by columns. 
Class ListViewItemComparer 
    Implements IComparer 

    Private col As Integer 

    Public Sub New() 
     col = 0 
    End Sub 

    Public Sub New(ByVal column As Integer) 
     col = column 
    End Sub 

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _ 
     Implements IComparer.Compare 
     Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text) 
    End Function 
End Class 

그리고 호출 :

는 비교자를 만들기

Me.listView1.ListViewItemSorter = New ListViewItemComparer(colNum) 

여기서, colNum은 정렬하려는 열의 색인입니다.

+0

정말 고마워요 :) 나를 많이 도와줍니다 :) –

+0

좋은 해결책 ... 틀린 언어 ... 부 ... –

+0

아아아, 끝났어. 지금 투표 해? :) –

1

오름차순/내림차순을 전환하려면 "정렬 순서"도 추적해야합니다. 비교 자 및 열 클릭 이벤트 핸들러에서.

예 :

ListViewItemComparer.vb :

Public Class ListViewItemComparer 
    ... 
    Private col As Integer 
    Private order As SortOrder 
    ... 
    Public Sub New() 
     col = 0 
     order = SortOrder.Ascending 
    ... 
    Public Sub New(ByVal column As Integer, order As SortOrder) 
     ... 
    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer 
     ... 
     ' Perform "compare": -1: s1 < s2; 0: s1=s2, 1: s1 > s2 
     Dim retval As Integer = -1 
     retval = [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text) 

     ' Reverse if "descending" 
     If order = SortOrder.Descending Then retval *= -1 

Form1.vb를

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     ... 
     ' Allow "reverse" sort 
     ' Initial order is "NONE". As any column is clicked, the order will toggle between Ascending (first), then Descending 
     ReDim ColumnOrder(4) 
     For i As Integer = 0 To ColumnOrder.Length - 1 
      ColumnOrder(i) = SortOrder.Descending 
     Next 
    ... 
    Private Sub ListView1_ColumnClick(sender As Object, e As ColumnClickEventArgs) Handles ListView1.ColumnClick 
     Dim ColumnHeader As System.Windows.Forms.ColumnHeader = ListView1.Columns(e.Column) 
     If ColumnOrder(e.Column) = SortOrder.Descending Then 
      ColumnOrder(e.Column) = SortOrder.Ascending 
     Else 
      ColumnOrder(e.Column) = SortOrder.Descending 
     End If 
     ListView1.Sorting = ColumnOrder(e.Column) 
     ListView1.Sort() 
     ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, ListView1.Sorting) 
     ... 

봐 여기 자세한 내용은 : MSDN: Sorting ListView Items by Column Using Windows Forms

관련 문제