dpirondi 0 Report post Posted April 6, 2012 olá, alguém poderia me ajudar se tem como eu classificar em data crescente os dados de um listview? pois utilizo um listview para listar informações de entregas de pedidos por data, mas não fica classificado por data crescente. Tem como fazer isso? Share this post Link to post Share on other sites
Andrepereira9 4 Report post Posted April 6, 2012 Boas Mete este código numa classe Implements IComparer Private Coluna As Integer Private OrdemSort As SortOrder Public Sub New(ByVal ColunaClique As Integer, ByVal _ OrdemSort As SortOrder) Coluna = ColunaClique Me.OrdemSort = OrdemSort End Sub Public Function Compare(ByVal x As Object, ByVal y As Object) _ As Integer Implements System.Collections.IComparer.Compare Dim OrdemItem As Integer Dim DataValida As DateTime Dim NumeroValido As Double If DateTime.TryParse(CType(x, ListViewItem).SubItems(Coluna).Text, _ DataValida) Then If DateTime.TryParse(CType(y, ListViewItem).SubItems(Coluna).Text, _ DataValida) Then OrdemItem = DateTime.Compare(CType(x, ListViewItem).SubItems _ (Coluna).Text, CType(y, ListViewItem).SubItems(Coluna).Text) Else OrdemItem = -1 End If ElseIf Double.TryParse(CType(x, ListViewItem).SubItems(Coluna) _ .Text, NumeroValido) Then If Double.TryParse(CType(y, ListViewItem).SubItems(Coluna).Text _ , NumeroValido) Then If Convert.ToDouble(CType(x, ListViewItem).SubItems(Coluna).Text) _ = Convert.ToDouble(CType(y, ListViewItem).SubItems(Coluna).Text) Then OrdemItem = 0 ElseIf Convert.ToDouble(CType(x, ListViewItem).SubItems _ (Coluna).Text) > Convert.ToDouble(CType(y, ListViewItem). _ SubItems(Coluna).Text) Then OrdemItem = 1 Else OrdemItem = -1 End If Else OrdemItem = -1 End If Else If CType(x, ListViewItem).SubItems(Coluna).Text.Trim = "" Then OrdemItem = 1 Else OrdemItem = String.Compare(CType(x, ListViewItem). _ SubItems(Coluna).Text, CType(y, ListViewItem).SubItems _ (Coluna).Text) End If End If 'INVERTE O RETORNO EM CASO DE ORDEM DECRESCENTE If OrdemSort = SortOrder.Descending Then OrdemItem *= -1 End If Return OrdemItem End Function Depois para ordenar fazes: ListView1.ListViewItemSorter = New aqui_alteras_para_o_nome_da_classe(0, ListView1.Sorting) Este código foi retirado do site www.programandovbnet.blogspot.pt A informática chegou para resolver problemas que antes não existiam Quem ri por último é porque está conectado a 52 Kbs. Share this post Link to post Share on other sites
dpirondi 0 Report post Posted April 10, 2012 Olá, obrigado pela sua resposta, mas não consegui fazer com que funcione, pois tenho um conhecimento pequeno em excel vba e não sei trabalhar com classes. Não tem como colocar esse código dentro do listview? como faço? segue abaixo um código que tenho utilizado para classificar o listview, mas nas colunas de datas ele classifica primeiro pelo dia e depois pelo mês, ou seja, se tenho as datas: 01/01/2012, 03/02/2012 e 02/03/2012 depois de classificado fica: 01/01/2012, 02/03/2012 e 03/02/2012. Tem como acrescentar algo no código que tenho abaixo? Private Sub ListView2_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) ListView2.Sorted = False ListView2.SortKey = ColumnHeader.Index - 1 If ListView2.SortOrder = lvwAscending Then ListView2.SortOrder = lvwDescending Else ListView2.SortOrder = lvwAscending End If ListView2.Sorted = True End Sub Share this post Link to post Share on other sites
acao 21 Report post Posted April 18, 2012 boas já tentas-te ordenar a tabela pelo campo data? o teu codigo não me parece muito correcto passa aqui http://www.macoratti.net/vb_tdl1.htm cumps acao Share this post Link to post Share on other sites