ORDENAR COLUNAS LISTVIEW VB.NET

LEONARDOSILVEIR 16/07/2011 16:38:12
#379354
Pessoal, preciso criar um metodo para classificar as colunas do meu listiview, em ordem crescente ou decrescente, sei que é possivel fazer isso no select, porém quero que seja feito ao clicar na coluna do listview. se possivel gostaria que tivesse um modo de fazer a classificação similar ao excel, por exemplo Data Contábil, valor, e numero de NF.
JONATHANSTECKER 16/07/2011 18:48:55
#379363
Resposta escolhida
Boa tarde Leonardo,

Crie uma classe em seu código fonte com o nome ListViewItemComparer, e depois adicione o código abaixo nesta classe.
Class ListViewItemComparer
Implements IComparer

Private Coluna As Integer
Private Ordem As SortOrder

Public Sub New()
Me.Coluna = 0
Me.Ordem = Windows.Forms.SortOrder.Ascending
End Sub

Public Sub New(ByVal pColuna As Integer)
Me.Coluna = pColuna
Me.Ordem = Windows.Forms.SortOrder.Ascending
End Sub

Public Sub New(ByVal column As Integer, ByVal s As SortOrder)
Me.Coluna = column
Me.Ordem = s
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
If Me.Ordem = Windows.Forms.SortOrder.Ascending Then
Return String.Compare(CType(x, ListViewItem).SubItems(Me.Coluna).Text, CType(y, ListViewItem).SubItems(Me.Coluna).Text)
Else
Return String.Compare(CType(y, ListViewItem).SubItems(Me.Coluna).Text, CType(x, ListViewItem).SubItems(Me.Coluna).Text)
End If
End Function

End Class

Após ter criado essa classe, você deve colocar este código no evento ColumnClick do ListView.
Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
If Me.ListView1.Sorting = SortOrder.Ascending Then
Me.ListView1.Sorting = SortOrder.Descending
Else
Me.ListView1.Sorting = SortOrder.Ascending
End If
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, Me.ListView1.Sorting)
End Sub

Obs.: Eu usava muito o ListView quando iniciei com o .NET, depois de longos estudos mudei para DataGridView. RECOMENDO, excelente componente.
LEONARDOSILVEIR 16/07/2011 19:14:14
#379365
Amigo funcionou perfeitamente, utilizo bastante também o datagridview, porém optei neste caso a utilizar o listview por necessidade própria do projeto.
Aproveitando sua ajuda como é feita a formatação de uma coluna como moeda no listview segue abaixo o codigo que utilizo para preenchimento:

Item.SubItems.Add(tabela.Fields([Ô]GROSS_AMT[Ô]).Value.ToString)


JONATHANSTECKER 16/07/2011 19:35:31
#379366
Tente assim:
Item.SubItems.Add(Format(Convert.ToDouble(tabela.Fields([Ô]GROSS_AMT[Ô]).Value.ToString), [Ô]c[Ô]))
LEONARDOSILVEIR 20/07/2011 19:43:45
#379631
valeu pela ajuda JONATHANSTECKER.
Tópico encerrado , respostas não são mais permitidas