USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  PARA O MODERADOR PC² / ORDENAR LISTVIEW
ventana
SANTOS
SP - BRASIL
Postada em 22/10/2004 11:05 hs            
Bom Dia
 
Voce me eviou o exemplo abaixo que estana secao de dicas, para ordenar um ListView de fora inteligente, de forma que numeros sejam ordenados por numeros edatas por datas, ao inves de serem consideradoscomo caracatres
 
Eu pegueiese exempleinfelizente nao fucionou, pois ocorre o erro de : User definied-type not definied.
 
O nome do meu Listview esta correto em todos os lugares, pois nao e ListView1, os comandos para serem colocados no modulo tambem foram colocados emesmo assim nao funcionou.
 
Infelizmente eu nao sou bom em API's.
Voce te alguma causa provavel para este problema?
 
Obrigado e  Abraco
Use isto:
 
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
'Usaremos o "Tag" de cada ColumHeader para armazenar
'se a coluna recebe valores:
'       = N para Números
'       = D para Datas
'       = T para Textos
If ColumnHeader.Tag = "N" Then '
    SortListView ListView1, ColumnHeader.Index, ldtNumber, OrdAsc
ElseIf ColumnHeader.Tag = "T" Then
    SortListView ListView1, ColumnHeader.Index, ldtString, OrdAsc
Else
    SortListView ListView1, ColumnHeader.Index, ldtDateTime, True
End If
OrdAsc = Not OrdAsc
End Sub
 
 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Public Sub SortListView(ListView As ListView, ByVal Index As Integer, _
                ByVal DataType As ListDataType, ByVal Ascending As Boolean)
    On Error Resume Next
    Dim i As Integer
    Dim l As Long
    Dim strFormat As String
    Dim lngCursor As Long
    lngCursor = ListView.MousePointer
    ListView.MousePointer = vbHourglass
    LockWindowUpdate ListView.hwnd
   
    Dim blnRestoreFromTag As Boolean
   
    Select Case DataType
    Case ldtString
        blnRestoreFromTag = False
       
    Case ldtNumber
        strFormat = String$(20, "0") & "." & String$(10, "0")
        With ListView.ListItems
            If (Index = 1) Then
                For l = 1 To .Count
                    With .Item(l)
                        .Tag = .Text & Chr$(0) & .Tag
                        If IsNumeric(.Text) Then
                            If CDbl(.Text) >= 0 Then
                                .Text = Format(CDbl(.Text), strFormat)
                            Else
                                .Text = "&" & InvNumber(Format(0 - CDbl(.Text), strFormat))
                            End If
                        Else
                            .Text = ""
                        End If
                    End With
                Next l
            Else
                For l = 1 To .Count
                    With .Item(l).ListSubItems(Index - 1)
                        .Tag = .Text & Chr$(0) & .Tag
                        If IsNumeric(.Text) Then
                            If CDbl(.Text) >= 0 Then
                                .Text = Format(CDbl(.Text), strFormat)
                            Else
                                .Text = "&" & InvNumber(Format(0 - CDbl(.Text), strFormat))
                            End If
                        Else
                            .Text = ""
                        End If
                    End With
                Next l
            End If
        End With
       
        blnRestoreFromTag = True
   
    Case ldtDateTime
        strFormat = "YYYYMMDDHhNnSs"
       
        Dim dte As Date
      
        With ListView.ListItems
            If (Index = 1) Then
                For l = 1 To .Count
                    With .Item(l)
                        .Tag = .Text & Chr$(0) & .Tag
                        dte = CDate(.Text)
                        .Text = Format$(dte, strFormat)
                    End With
                Next l
            Else
                For l = 1 To .Count
                    With .Item(l).ListSubItems(Index - 1)
                        .Tag = .Text & Chr$(0) & .Tag
                        dte = CDate(.Text)
                        .Text = Format$(dte, strFormat)
                    End With
                Next l
            End If
        End With
       
        blnRestoreFromTag = True
       
    End Select
      
    ListView.SortOrder = IIf(Ascending, lvwAscending, lvwDescending)
    ListView.SortKey = Index - 1
    ListView.Sorted = True
       
    If blnRestoreFromTag Then
               
        With ListView.ListItems
            If (Index = 1) Then
                For l = 1 To .Count
                    With .Item(l)
                        i = InStr(.Tag, Chr$(0))
                        .Text = Left$(.Tag, i - 1)
                        .Tag = Mid$(.Tag, i + 1)
                    End With
                Next l
            Else
                For l = 1 To .Count
                    With .Item(l).ListSubItems(Index - 1)
                        i = InStr(.Tag, Chr$(0))
                        .Text = Left$(.Tag, i - 1)
                        .Tag = Mid$(.Tag, i + 1)
                    End With
                Next l
            End If
        End With
    End If
       
    LockWindowUpdate 0&
       
    ListView.MousePointer = lngCursor
End Sub

 

     
PC²
Pontos: 2843 Pontos: 2843
JUCUTUQUARA, VITÓRIA
ES - BRASIL
Postada em 23/10/2004 09:40 hs            
oLÁ AMIGO,


você pode, por gentileza, colocar somente a linha aonde ocorre o erro "User definied-type not definied."
 
pois o VB deve indicá-la.

____________________________

PC²   T+

 

     
ventana
SANTOS
SP - BRASIL
Postada em 23/10/2004 18:22 hs            
Public Sub SortListView(ListView As ListView, ByVal Index As Integer, _
                ByVal DataType As ListDataType, ByVal Ascending As Boolean)
 
o Erro ocorreu na linha acima
 
 
 
Obrigado
     
ventana
SANTOS
SP - BRASIL
Postada em 25/10/2004 22:09 hs            
Ola como vai?
 
c viu a minha resposta?
 
Um Abraço
     
Semmer
CURITIBA
PR - BRASIL
Postada em 26/10/2004 14:35 hs            
Ventana, eu uso uma maneira diferente de tratar a listview, podendo ordenar qualquer coluna ascendente ou descendente (num segundo clique da mesma coluna). Eu crio uma coluna a mais para cada coluna com data ou valor, e mantenho essas "clones" com largura zero para não aparecer. O conteúdo delas, eu preencho com a data ou valor correspondente usando uma formatação que permita classificar igual texto. Ao clicar na coluna com data ou valor, é a clone que faz a ordenação. Segue um exemplo pra você dar uma olhada.
 
'Num módulo qualquer:
Public Sub OrdenaLvw(ByVal LVW As MSComctlLib.ListView, ByVal ColCabecalho As MSComctlLib.ColumnHeader)
'Ordena o ListView conforme a coluna especificada.
   If LVW.SortKey = ColCabecalho.Index - 1 Then
      LVW.SortOrder = IIf(LVW.SortOrder = lvwAscending, lvwDescending, lvwAscending)
   Else
      LVW.SortOrder = lvwAscending
   End If
   LVW.SortKey = ColCabecalho.Index - 1
   LVW.Sorted = True
End Sub

'A montagem e preenchimento de um listview (Name = LSV) no form,
'considerando que já foi criado uma consulta num recordset Rs:
LSV.ListItems.Clear
LSV.ColumnHeaders.Clear
LSV.ColumnHeaders.Add , , "Codigo", 1000
LSV.ColumnHeaders.Add , , "Tipo", 1500
LSV.ColumnHeaders.Add , , "Data", 1500, 2
LSV.ColumnHeaders.Add , , "Valor", 1500, 1
LSV.ColumnHeaders.Add , , "dt1", 0    'colunas com tamanho zero para não aparecer
LSV.ColumnHeaders.Add , , "vl1r", 0
Do Until Rs.Eof
   Set Item = LSV.ListItems.Add
   Item.Text = Format(Rs!cod, "0000")
   Item.SubItems(1) = Rs!tipo
   Item.SubItems(2) = Format(Rs!data, "dd/mm/yy")
   Item.SubItems(3) = Format(Rs!valor, "#,##0.00")
   Item.SubItems(4) = Format(Rs!data, "yyyymmdd")    'formato que permite classificação como se fosse texto
   Item.SubItems(5) = Format(Rs!valor * 100, "000000000000000")
   Rs.Movenext
Loop
LSV.Refresh

'Evento do listview:
Private Sub LSV_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
   If ColumnHeader = LSV.ColumnHeaders(3).Text Then
      OrdenaLvw LSV, LSV.ColumnHeaders(5)
   ElseIf ColumnHeader = LSV.ColumnHeaders(4).Text Then
      OrdenaLvw LSV, LSV.ColumnHeaders(6)
   Else
      OrdenaLvw LSV, ColumnHeader
   End If
End Sub

Olha, tem funcionado legal, experimenta e qualquer coisa, tamos aí....
TÓPICO EDITADO
   
PC²
Pontos: 2843 Pontos: 2843
JUCUTUQUARA, VITÓRIA
ES - BRASIL
ENUNCIADA !
Postada em 26/10/2004 16:27 hs            
oLÁ,
 
 
FOI MAL fatou colocar uma coisa no MODULE:
 
Public Enum ListDataType
    ldtString = 0
    ldtNumber = 1
    ldtDateTime = 2
End Enum

____________________________

PC²   T+

 

   
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página