elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ListView [Ordenar por Fecha]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ListView [Ordenar por Fecha]  (Leído 5,848 veces)
e500

Desconectado Desconectado

Mensajes: 83


Ver Perfil
ListView [Ordenar por Fecha]
« en: 30 Julio 2010, 08:06 am »

Seguramente ya existen post de este tipo, pero quiero sacarme la duda de una funsion, aver q consejos me pueden dar para mejorarla.

Los que hace es simplemente acomodar por fecha dentro de un rango de fechas, ¿qué es esto de rango de fechas? bueno simplemente si yo especifico a Text1 20/07/2010 y al Text2 28/07/2010 y le doy click al commandobutton [Filtrar] me filtra toda la informacion q aparece en mi listview. Dejándome solamente desde la fecha 20/07/2010 hasta la fecha 28/07/2010 todos los datos, y ordenados por fecha de menor a mayor. La información q aparece en el ListView es MUCHA!  :xD  es por eso tal ves aveces me mescle algúna q otra fecha.

Modulo:

Código
  1.  
  2. Public Sub ordenarLV(LV As ListView, col As Integer)
  3.  
  4.   Dim Formato As String, i As Long, strData() As String
  5.  
  6. 1       'ORDENAR LISTVIEW POR FECHA DE PASADO A PRESENTE
  7.  
  8. 2       Formato = "YYYYMMDD"
  9.  
  10. 3       With LV
  11. 4           With .ListItems
  12. 5               For i = 1 To .Count
  13. 6                   With .Item(i).ListSubItems(col)
  14. 7                       .Tag = .Text & Chr$(0) & .Tag
  15. 8                       If IsDate(.Text) Then
  16. 9                           .Text = Format(CDate(.Text), Formato)
  17. 10                      Else
  18. 11                          .Text = ""
  19. 12                      End If
  20. 13                  End With
  21. 14              Next i
  22. 15          End With
  23.  
  24. 16          .SortOrder = 0    '.SortOrder = (.SortOrder + 1) Mod 2 ' Mayor a menor
  25. 17          .SortKey = col
  26. 18          .Sorted = True
  27.  
  28. 19          With .ListItems
  29. 20              For i = 1 To .Count
  30. 21                  With .Item(i).ListSubItems(col)
  31. 22                      strData = Split(.Tag, Chr$(0))
  32. 23                      .Text = strData(0)
  33. 24                      .Tag = strData(1)
  34. 25                  End With
  35. 26              Next i
  36. 27          End With
  37. 28      End With
  38.  
  39. End Sub
  40.  
  41. Public Sub filtrarango(LV As ListView, F1 As String, F2 As String, col As Integer)
  42.  
  43.  Dim i         As Long
  44.  Dim Tmp       As Integer
  45.  Dim Day1      As String
  46.  Dim Day2      As String
  47.  Dim dat       As String
  48.  
  49. 1       'FILTRAR RANGO
  50.  
  51. 2       Day1 = Mid(F1, 1, 2)
  52. 3       Day2 = Mid(F2, 1, 2)
  53. 4       'dat = Mid(F1, 3, 10)
  54.  
  55. 6       With LV
  56. 7           Tmp = .ListItems.Count
  57. 8           For i = 1 To Tmp
  58. 9               If i > Tmp Then Exit For
  59. 10              dat = .ListItems(i).ListSubItems(col)
  60. 11              dat = Mid(dat, 1, 2)
  61. 12              If dat >= Day1 And dat <= Day2 Then
  62. 13              Else
  63. 14                  'MsgBox dat
  64. 15                  .ListItems.Remove i
  65. 16                  i = i - 1
  66. 17                  Tmp = Tmp - 1
  67. 18                  If i = Tmp Then Exit For
  68. 19              End If
  69. 20          Next i
  70. 21      End With
  71.  
  72. End Sub
  73.  
  74.  

Form:

Código
  1.  
  2. Private Sub Form_Load()
  3.    Text1.Text = "20/07/2010"
  4.    Text2.Text = "28/07/2010"
  5. End Sub
  6.  
  7. Private Sub cmdrango_Click()
  8.    Call filtrarango(LV, Text1.Text, Text2.Text, "3")
  9.    Call ordenarLV(LV, "3")                                                     'En la columna 3 del listview tengo las fechas.
  10. End Sub
  11.  
  12.  

Espero que puedan evitar mi problema, ya q muy pocas veces me mescla las fechas. Pregunto el problema puede ser porque llamo a las 2 funsiones a la ves, y si no es ese el problema cual es?

Salu2 y gracias a todos :D


« Última modificación: 30 Julio 2010, 19:15 pm por e500 » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ListView [Ordenar por Fecha]
« Respuesta #1 en: 30 Julio 2010, 08:44 am »

No tienes que hacer tanto drama aqui tienes con esto es mas que suficiente!¡

Codigo:

Código
  1.  
  2. Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
  3.    With ListView1
  4.        .SortKey = (ColumnHeader.Index - 1)   ' numero de la columna con la que ordenaremos!¡.
  5.        .SortOrder = Abs(Not CBool(.SortOrder)) ' tipo de ordenacion
  6.        '.Sorted = true ' para que ordene
  7.    End With
  8. End Sub
  9.  
  10.  

Ejemplo:

Código
  1.  
  2. Private Sub Form_Load()
  3. Dim NodX        As Node
  4. Dim i           As Integer
  5.  
  6.    With ListView1
  7.        .View = lvwReport
  8.        .ColumnHeaders.Add , , "ID"
  9.        .ColumnHeaders.Add , , "Fechas"
  10.        For i = 0 To 5
  11.            .ListItems.Add(, , i).SubItems(1) = Rnd(1) * 30 & "/" & Rnd(1) * 12 & "/" & Rnd(1) * 99
  12.        Next
  13.        .Sorted = True
  14.    End With
  15.  
  16. End Sub
  17.  
  18. Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
  19.    With ListView1
  20.        .SortKey = (ColumnHeader.Index - 1)
  21.        .SortOrder = Abs(Not CBool(.SortOrder))
  22.        '.Sorted = true ' para que ordene
  23.    End With
  24. End Sub
  25.  
  26.  

P.D.: Usa Geshi [code=Vb]aqui tu codigo[/code]

Sangriento Infierno Lunar!¡.


« Última modificación: 30 Julio 2010, 08:46 am por BlackZeroX » En línea

The Dark Shadow is my passion.
e500

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: ListView [Ordenar por Fecha]
« Respuesta #2 en: 30 Julio 2010, 19:18 pm »

Gracias BlackZeroX, pero tu funsion mezacla datos.

Código
  1. Public Sub filtrarango(LV As ListView, F1 As String, F2 As String, col As Integer)
  2.  
  3.  Dim i         As Long
  4.  Dim Tmp       As Integer
  5.  Dim Day1      As String
  6.  Dim Day2      As String
  7.  Dim dat       As String
  8.  
  9. 1       'FILTRAR RANGO
  10.  
  11. 2       Day1 = Mid(F1, 1, 2)
  12. 3       Day2 = Mid(F2, 1, 2)
  13. 4       'dat = Mid(F1, 3, 10)
  14.  
  15. 6       With LV
  16. 7           Tmp = .ListItems.Count
  17. 8           For i = 1 To Tmp
  18. 9               If i > Tmp Then Exit For
  19. 10              dat = .ListItems(i).ListSubItems(col)
  20. 11              dat = Mid(dat, 1, 2)
  21. 12              If dat >= Day1 And dat <= Day2 Then
  22. 13              Else
  23. 14                  'MsgBox dat
  24. 15                  .ListItems.Remove i
  25. 16                  i = i - 1
  26. 17                  Tmp = Tmp - 1
  27. 18                  If i = Tmp Then Exit For
  28. 19              End If
  29. 20          Next i
  30. 21      End With
  31.  
  32. End Sub
  33.  

Salu2 y gracias por tu ayuda.
« Última modificación: 31 Julio 2010, 01:37 am por e500 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines