Visual Basic - listview ordenado por cabecera

Life is soft - evento anual de software empresarial
 
Vista:

listview ordenado por cabecera

Publicado por rivieras (10 intervenciones) el 20/07/2007 08:07:07
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 cabecera

Publicado por barca1010 (132 intervenciones) el 20/07/2007 09:10:52
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 cabecera

Publicado por Santi (2 intervenciones) el 20/07/2007 10:30:07
'&&&&'
{^o¨o^}
__º__
/////\\\\\\

__/\__|
LL LL

Hola, hola, hola...
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 cabecera

Publicado por Carlos (66 intervenciones) el 20/07/2007 20:50:18
Asi tambien funciona!

Private Sub listview_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Select Case ColumnHeader
Case "Codigo"
If lstBoleta.SortOrder = lvwAscending Then
lstBoleta.SortKey = 0
lstBoleta.SortOrder = lvwDescending
Else
lstBoleta.SortKey = 0
lstBoleta.SortOrder = lvwAscending
End If
Case "Nombre"
If lstBoleta.SortOrder = lvwAscending Then
lstBoleta.SortKey = 1
lstBoleta.SortOrder = lvwDescending
Else
lstBoleta.SortKey = 1
lstBoleta.SortOrder = lvwAscending
End If
End Select
End Sub

Bueno asi lo hago yo
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 cabecera

Publicado por Santi (2 intervenciones) el 20/07/2007 23:21:29
que no man, que no, asi no funciona!!!

columna numerica qu ese ordeña =

1000
2

está antes el 1000 que el 2?
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 cabecera

Publicado por riveiras (10 intervenciones) el 26/07/2007 14:31:10
Muchas gracias, lo usé y luego modificando reduje el código, y creo que funciona igual


Private Sub lstView_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
If lstView.SortOrder = lvwAscending Then
lstView.SortKey = ColumnHeader.index - 1
lstView.SortOrder = lvwDescending
Else
lstView.SortKey = ColumnHeader.index - 1
lstView.SortOrder = lvwAscending
End If
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