ListView [Ordenar por Fecha]

Iniciado por e500, 30 Julio 2010, 08:06 AM

0 Miembros y 1 Visitante están viendo este tema.

e500

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 (vb) [Seleccionar]


Public Sub ordenarLV(LV As ListView, col As Integer)

  Dim Formato As String, i As Long, strData() As String

1       'ORDENAR LISTVIEW POR FECHA DE PASADO A PRESENTE

2       Formato = "YYYYMMDD"

3       With LV
4           With .ListItems
5               For i = 1 To .Count
6                   With .Item(i).ListSubItems(col)
7                       .Tag = .Text & Chr$(0) & .Tag
8                       If IsDate(.Text) Then
9                           .Text = Format(CDate(.Text), Formato)
10                      Else
11                          .Text = ""
12                      End If
13                  End With
14              Next i
15          End With

16          .SortOrder = 0    '.SortOrder = (.SortOrder + 1) Mod 2 ' Mayor a menor
17          .SortKey = col
18          .Sorted = True
   
19          With .ListItems
20              For i = 1 To .Count
21                  With .Item(i).ListSubItems(col)
22                      strData = Split(.Tag, Chr$(0))
23                      .Text = strData(0)
24                      .Tag = strData(1)
25                  End With
26              Next i
27          End With
28      End With
       
End Sub

Public Sub filtrarango(LV As ListView, F1 As String, F2 As String, col As Integer)

 Dim i         As Long
 Dim Tmp       As Integer
 Dim Day1      As String
 Dim Day2      As String
 Dim dat       As String

1       'FILTRAR RANGO

2       Day1 = Mid(F1, 1, 2)
3       Day2 = Mid(F2, 1, 2)
4       'dat = Mid(F1, 3, 10)

6       With LV
7           Tmp = .ListItems.Count
8           For i = 1 To Tmp
9               If i > Tmp Then Exit For
10              dat = .ListItems(i).ListSubItems(col)
11              dat = Mid(dat, 1, 2)
12              If dat >= Day1 And dat <= Day2 Then
13              Else
14                  'MsgBox dat
15                  .ListItems.Remove i
16                  i = i - 1
17                  Tmp = Tmp - 1
18                  If i = Tmp Then Exit For
19              End If
20          Next i
21      End With

End Sub



Form:

Código (vb) [Seleccionar]


Private Sub Form_Load()
   Text1.Text = "20/07/2010"
   Text2.Text = "28/07/2010"
End Sub

Private Sub cmdrango_Click()
   Call filtrarango(LV, Text1.Text, Text2.Text, "3")
   Call ordenarLV(LV, "3")                                                     'En la columna 3 del listview tengo las fechas.
End Sub



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

BlackZeroX

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

Codigo:

Código (vb) [Seleccionar]


Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
   With ListView1
       .SortKey = (ColumnHeader.Index - 1)   ' numero de la columna con la que ordenaremos!¡.
       .SortOrder = Abs(Not CBool(.SortOrder)) ' tipo de ordenacion
       '.Sorted = true ' para que ordene
   End With
End Sub



Ejemplo:

Código (Vb) [Seleccionar]


Private Sub Form_Load()
Dim NodX        As Node
Dim i           As Integer

   With ListView1
       .View = lvwReport
       .ColumnHeaders.Add , , "ID"
       .ColumnHeaders.Add , , "Fechas"
       For i = 0 To 5
           .ListItems.Add(, , i).SubItems(1) = Rnd(1) * 30 & "/" & Rnd(1) * 12 & "/" & Rnd(1) * 99
       Next
       .Sorted = True
   End With
   
End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
   With ListView1
       .SortKey = (ColumnHeader.Index - 1)
       .SortOrder = Abs(Not CBool(.SortOrder))
       '.Sorted = true ' para que ordene
   End With
End Sub



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

Sangriento Infierno Lunar!¡.
The Dark Shadow is my passion.

e500

#2
Gracias BlackZeroX, pero tu funsion mezacla datos.

Código (vb) [Seleccionar]

Public Sub filtrarango(LV As ListView, F1 As String, F2 As String, col As Integer)

 Dim i         As Long
 Dim Tmp       As Integer
 Dim Day1      As String
 Dim Day2      As String
 Dim dat       As String

1       'FILTRAR RANGO

2       Day1 = Mid(F1, 1, 2)
3       Day2 = Mid(F2, 1, 2)
4       'dat = Mid(F1, 3, 10)

6       With LV
7           Tmp = .ListItems.Count
8           For i = 1 To Tmp
9               If i > Tmp Then Exit For
10              dat = .ListItems(i).ListSubItems(col)
11              dat = Mid(dat, 1, 2)
12              If dat >= Day1 And dat <= Day2 Then
13              Else
14                  'MsgBox dat
15                  .ListItems.Remove i
16                  i = i - 1
17                  Tmp = Tmp - 1
18                  If i = Tmp Then Exit For
19              End If
20          Next i
21      End With

End Sub


Salu2 y gracias por tu ayuda.