Visual Basic - listview ordenado por cabcera

Life is soft - evento anual de software empresarial
 
Vista:

listview ordenado por cabcera

Publicado por rivieras (10 intervenciones) el 20/07/2007 08:08:21
hola, necesito vuestra ayuda. Tengo un listview en mi aplicación y necesito hacer que se ordene por los campos que tiene en la cabecera. Es decir si se pincha en código ordene por código, si se pincha en la cabecera de apellido ordene por apellidos y así con los campos que tiene....
muchas gracias.espero respuesta.
riveiras
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:listview ordenado por cabcera

Publicado por barca1010 (132 intervenciones) el 20/07/2007 10:41:03
Yo utilizo este codigo que consegui en internet es un poco largo pero funciona con cualquier tipo de datos, Texto, numeros y fechas.. espero que te sirva

Private Sub lsvAvisosVIP_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
With lsvAvisosVIP
Dim I As Long
Dim Formato As String
Dim strData() As String
Dim Columna As Long

Columna = ColumnHeader.Index - 1

Select Case UCase(.ColumnHeaders.Item(ColumnHeader.Index).Tag)
Case "DATE"
Formato = "YYYYMMDDHhNnSs"
With .ListItems
If (Columna > 0) Then
For I = 1 To .Count
With .Item(I).ListSubItems(Columna)
.Tag = .Text & Chr$(0) & .Tag
If IsDate(.Text) Then
.Text = Format(CDate(.Text), Formato)
Else
.Text = ""
End If
End With
Next I
Else
For I = 1 To .Count
With .Item(I)
.Tag = .Text & Chr$(0) & .Tag
If IsDate(.Text) Then
.Text = Format(CDate(.Text), Formato)
Else
.Text = ""
End If
End With
Next I
End If
End With

.SortOrder = (.SortOrder + 1) Mod 2
.SortKey = ColumnHeader.Index - 1
.Sorted = True

With .ListItems
If (Columna > 0) Then
For I = 1 To .Count
With .Item(I).ListSubItems(Columna)
strData = Split(.Tag, Chr$(0))
.Text = strData(0)
.Tag = strData(1)
End With
Next I
Else
For I = 1 To .Count
With .Item(I)
strData = Split(.Tag, Chr$(0))
.Text = strData(0)
.Tag = strData(1)
End With
Next I
End If
End With

Case "NUMBER"
Formato = String(30, "0") & "." & String(30, "0")

With .ListItems
If (Columna > 0) Then
For I = 1 To .Count
With .Item(I).ListSubItems(Columna)
.Tag = .Text & Chr$(0) & .Tag
If IsNumeric(.Text) Then
If CDbl(.Text) >= 0 Then
.Text = Format(CDbl(.Text), Formato)
Else
.Text = "&" & InvNumber(Format(0 - CDbl(.Text), Formato))
End If
Else
.Text = ""
End If
End With
Next I
Else
For I = 1 To .Count
With .Item(I)
.Tag = .Text & Chr$(0) & .Tag
If IsNumeric(.Text) Then
If CDbl(.Text) >= 0 Then
.Text = Format(CDbl(.Text), Formato)
Else
.Text = "&" & InvNumber(Format(0 - CDbl(.Text), Formato))
End If
Else
.Text = ""
End If
End With
Next I
End If
End With

.SortOrder = (.SortOrder + 1) Mod 2
.SortKey = ColumnHeader.Index - 1
.Sorted = True

With .ListItems
If (Columna > 0) Then
For I = 1 To .Count
With .Item(I).ListSubItems(Columna)
strData = Split(.Tag, Chr$(0))
.Text = strData(0)
.Tag = strData(1)
End With
Next I
Else
For I = 1 To .Count
With .Item(I)
strData = Split(.Tag, Chr$(0))
.Text = strData(0)
.Tag = strData(1)
End With
Next I
End If
End With

Case Else
.SortOrder = (.SortOrder + 1) Mod 2
.SortKey = ColumnHeader.Index - 1
.Sorted = True
End Select
End With

lsvAvisosVIP.Refresh
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:listview ordenado por cabcera

Publicado por riveiras (10 intervenciones) el 31/07/2007 08:08:22
muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar