ListView Ordenar por culumna fecha

1,156 views
Skip to first unread message

Arnaldo Toledano

unread,
Jul 17, 2013, 2:42:40 PM7/17/13
to publice...@googlegroups.com
Gente.
Utilizo la fecha BRITISH , es decir   para la fecha de hoy 17/07/2013
En un ListView, cuando hago click en la columna, para que me la ordene por la misma,
me la ordena teniendo en cuenta el día.
Es decir queda así.

31/07/2012
31/05/2012
31/04/2012
30/06/2013
30/05/2013

Alguien tiene alguna IDEA para que al pretender ordenar por dicha columna lo
realice en función del año-mes-día ?


Gracias de antemano.
--
Arnaldo Toledano
Tesys Informática
Córdoba
Argentina

Arnaldo Toledano

unread,
Jul 17, 2013, 2:47:28 PM7/17/13
to publice...@googlegroups.com
Me falto agregar el codigo que tengo para el caso en el metodo ColumnClick

LPARAMETERS columnheader
olv = thisform.pf1.page1.lv
olv.sorted = .t.
nIndex = ColumnHeader.index
IF olv.SortOrder = 0
    olv.SortOrder = 1
ELSE
    olv.SortOrder = 0
ENDIF    

this.SortKey=ColumnHeader.Index-1

Ricardo Pina

unread,
Jul 17, 2013, 3:15:00 PM7/17/13
to Grupo VFP
Hola Arnaldo
 
Mira este link que aunque es de VB te puede dar la idea de como solucionarlo
 
 
Saludos
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Víctor Hugo Espínola Domínguez

unread,
Jul 17, 2013, 3:59:29 PM7/17/13
to publicesvfoxpro
Hola Arnaldo

Debes agregar una columna auxiliar que contenga DTOS( fecha ), más información en el siguiente enlace: http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=39

Saludos,
Víctor.

Arnaldo Toledano

unread,
Jul 18, 2013, 10:29:28 AM7/18/13
to publice...@googlegroups.com
Gracias Ricardo, pero no me funciono.
Hace mención a como definir las columnas para su posterior indexacion, pero no me funciono.
Por allí es un error mio, que tendría que analizar, puesto que VFP me "sugiere" escribir lo que
indica el articulo.
Concretamente pasa esto
c

Según el Articulo debería colocar   ).tag("DATE")

Pero .... no solo que no funciona, no me deja Indexar por ninguna columna.

Gracias Ricardo


Arnaldo Toledano

Arnaldo Toledano

unread,
Jul 18, 2013, 10:43:02 AM7/18/13
to publice...@googlegroups.com
Gracias Victor Hugo, pero no veo concretamente cual es la solución.
Lo había leído antes y no lo entiendo realmente.

Nota de la traductora:  Por ejemplo, si tiene las fechas: 25-01-01 / 02-03-01 / 30-10-02 / 02-01-03 / 20-03-03. El orden en que le aparecerán al hacer clic en el encabezado de columna será 02-01-03 / 02-03-01 / 20-03-03 / 25-01-01 / 30-10-02 Esto deja ver un orden no deseado en los elementos de la lista.

Al utilizar cSortColumns, puede especificar una columna alternativa para ordenar. Esta puede contener los mismos datos en formato YYYYMMDD. Al establecer el ancho para esta columna alternativa en cero, el usuario no notará de su presencia.


Es lo que dice.
Pero no alcanzo a interpretarlo correctamente.
Como hace el usuario para ORDENAR por una columna que no se ve ?
O en su defecto, QUE CÓDIGO pongo para indexar por esa columna ???


Gracias Victor

Arnaldo Toledano

Víctor Hugo Espínola Domínguez

unread,
Jul 18, 2013, 10:53:21 AM7/18/13
to publicesvfoxpro
Hola Arnaldo

La clave está en lo que está a continuación:
"
cSortColumns – debe contener una lista delimitada por comas de números enteros, uno por columna, en la secuencia que las columnas son listadas en cData. Si un dato dado es cero, entonces haciendo Clic sobre su encabezado de columna va a ordenar la lista en esa columna. Si esta contiene un valor positivo, entonces el entero representa el número de la columna a ser ordenada.

Considere este ejemplo:

SELECT OrdenID, OrdenFecha, OrdenCantidad ;
DTOS(OrdenFecha) AS OrdenYMD ;
FROM Ordenes INTO CURSOR ListaOrdenes
WITH THISFORM.MySimpleList
  .cAlias = "ListaOrdenes"
  .cData = "OrdenID,OrdenFecha,OrdenCantidad,OrdenYMD"
  .cColumnHeaders = "No. Orden,Fecha,Cantidad"
  .cColumnWidths = "200,80,100,0"
  .lSorted = .T.
  .cSortColumns = "0,4,0"
  .PopulateList
ENDWITH

En este caso va a mostrar una lista de 4 columnas, que contienen respectivamente el número de orden (OrdenID), la fecha de la orden (OrdenFecha - en el formato SET DATE actual), Cantidad (OrdenCantidad), y Fecha de la orden nuevamente (OrdenYMD - en formato YYYYMMDD).

Nota de la traductora: Al Hacer Clic en el encabezado de la columna Fecha SimpleList advierte que es la columna 2(FechaOrden) y que tiene un número 4 asociado, por tanto, busca la columna 4 (Orden YMD) y establece el orden por los valores de esta columna 4, esté la misma visible o no.
"

Si quieres puedes publicar el código completo y veremos como soluciionarlo.

Saludos,
Víctor.

Arnaldo Toledano

unread,
Jul 18, 2013, 10:57:21 AM7/18/13
to publice...@googlegroups.com
No encuentro la PROPIEDAD   .cSortColumns = "0,4,0"?????????????
Tampoco la lShowTooltips

Arnaldo

Ricardo Pina

unread,
Jul 18, 2013, 11:11:51 AM7/18/13
to Grupo VFP
Hola Arnaldo
 
Creo que te faltó leer más abajo.
Además de agregar el valor al Tag de las columnas tendrías que programar el método Click()
 
Saludos

ZeRoberto

unread,
Jul 18, 2013, 1:39:43 PM7/18/13
to publicesvfoxpro
Y si primero lo ordenas en el cursor y luego lo cargas en el listview?

Arnaldo Toledano

unread,
Jul 18, 2013, 2:40:48 PM7/18/13
to publice...@googlegroups.com
De cual de los dos Articulos ???
Del VB; no veo NADA, tampoco veo nada en el PortalFox


Arnaldo
El 18/07/2013 12:11 p.m., Ricardo Pina escribi�:
Hola Arnaldo
�
Creo que te falt� leer m�s abajo.
Adem�s de agregar el valor al Tag de las columnas tendr�as que programar el m�todo Click()
�
Saludos


El 18 de julio de 2013 11:57, Arnaldo Toledano <arnaldo....@gmail.com> escribi�:
No encuentro la PROPIEDAD � .cSortColumns = "0,4,0"?????????????
Tampoco la lShowTooltips

Arnaldo

El 18/07/2013 11:53 a.m., V�ctor Hugo Esp�nola Dom�nguez escribi�:
Hola Arnaldo

La clave est� en lo que est� a continuaci�n:
"
cSortColumns � debe contener una lista delimitada por comas de n�meros enteros, uno por columna, en la secuencia que las columnas son listadas en cData. Si un dato dado es cero, entonces haciendo Clic sobre su encabezado de columna va a ordenar la lista en esa columna. Si esta contiene un valor positivo, entonces el entero representa el n�mero de la columna a ser ordenada.


Considere este ejemplo:

SELECT OrdenID, OrdenFecha, OrdenCantidad ;
DTOS(OrdenFecha) AS OrdenYMD ;
FROM Ordenes INTO CURSOR ListaOrdenes
WITH THISFORM.MySimpleList
� .cAlias = "ListaOrdenes"
� .cData = "OrdenID,OrdenFecha,OrdenCantidad,OrdenYMD"
� .cColumnHeaders = "No. Orden,Fecha,Cantidad"
� .cColumnWidths = "200,80,100,0"
� .lSorted = .T.
� .cSortColumns = "0,4,0"
� .PopulateList
ENDWITH

En este caso va a mostrar una lista de 4 columnas, que contienen respectivamente el n�mero de orden (OrdenID), la fecha de la orden (OrdenFecha - en el formato SET DATE actual), Cantidad (OrdenCantidad), y Fecha de la orden nuevamente (OrdenYMD - en formato YYYYMMDD).

Nota de la traductora: Al Hacer Clic en el encabezado de la columna Fecha SimpleList advierte que es la columna 2(FechaOrden) y que tiene un n�mero 4 asociado, por tanto, busca la columna 4 (Orden YMD) y establece el orden por los valores de esta columna 4, est� la misma visible o no.
"

Si quieres puedes publicar el c�digo completo y veremos como soluciionarlo.

Saludos,
V�ctor.



El 18 de julio de 2013 10:43, Arnaldo Toledano <arnaldo....@gmail.com> escribi�:
Gracias Victor Hugo, pero no veo concretamente cual es la soluci�n.
Lo hab�a le�do antes y no lo entiendo realmente.

Nota de la traductora:� Por ejemplo, si tiene las fechas: 25-01-01 / 02-03-01 / 30-10-02 / 02-01-03 / 20-03-03. El orden en que le aparecer�n al hacer clic en el encabezado de columna ser� 02-01-03 / 02-03-01 / 20-03-03 / 25-01-01 / 30-10-02 Esto deja ver un orden no deseado en los elementos de la lista.

Al utilizar cSortColumns, puede especificar una columna alternativa para ordenar. Esta puede contener los mismos datos en formato YYYYMMDD. Al establecer el ancho para esta columna alternativa en cero, el usuario no notar� de su presencia.


Es lo que dice.
Pero no alcanzo a interpretarlo correctamente.
Como hace el usuario para ORDENAR por una columna que no se ve ?
O en su defecto, QUE C�DIGO pongo para indexar por esa columna ???


Gracias Victor

Arnaldo Toledano

El 17/07/2013 04:59 p.m., V�ctor Hugo Esp�nola Dom�nguez escribi�:
Hola Arnaldo

Debes agregar una columna auxiliar que contenga DTOS( fecha ), m�s informaci�n en el siguiente enlace:�http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=39

Saludos,
V�ctor.



El 17 de julio de 2013 14:42, Arnaldo Toledano <arnaldo....@gmail.com> escribi�:
Gente.
Utilizo la fecha BRITISH , es decir�� para la fecha de hoy 17/07/2013

En un ListView, cuando hago click en la columna, para que me la ordene por la misma,
me la ordena teniendo en cuenta el d�a.
Es decir queda as�.


31/07/2012
31/05/2012
31/04/2012
30/06/2013
30/05/2013

Alguien tiene alguna IDEA para que al pretender ordenar por dicha columna lo
realice en funci�n del a�o-mes-d�a ?


Gracias de antemano.
--
Arnaldo Toledano
Tesys Inform�tica
C�rdoba
Argentina


--
Arnaldo Toledano Tesys Inform�tica C�rdoba Argentina


--
Arnaldo Toledano Tesys Inform�tica C�rdoba Argentina



--
���� �������

������������������ Ricardo Pina

Desarrollo y Servicios Inform�ticos

����������������� Profesionales
�������������� www.dsip.com.ar

�

�


--
Arnaldo Toledano Tesys Inform�tica C�rdoba Argentina

Arnaldo Toledano

unread,
Jul 18, 2013, 2:41:06 PM7/18/13
to publice...@googlegroups.com
No ZeRoberto, cuando el USUARIO tiene el LISTVIEW en pantalla, puede ORDENAR por la columna que desee.

En el caso que vos planteas, en el CLIK de la COLUMNA tendria que :
1.- Verificar si la COLUMNA es tipo DATE
2.- En El caso que lo SEA
��� 2.1.- Ordena por Fecha con el DTOS(En el CURSOR)
��� 2.2.- Recien alli, mostrar el CURSOR NUEVAMENTE
���
Por alli se te descompagina TODO y chau listview
Cuando el Listview te lo hace de manera automatica.


Arnaldo

El 18/07/2013 02:39 p.m., ZeRoberto escribi�:
Y si primero lo ordenas en el cursor y luego lo cargas en el listview?


El 18 de julio de 2013 10:11, Ricardo Pina <ric...@gmail.com> escribi�:
Hola Arnaldo
�
Creo que te falt� leer m�s abajo.
Adem�s de agregar el valor al Tag de las columnas tendr�as que programar el m�todo Click()
�
Saludos


El 18 de julio de 2013 11:57, Arnaldo Toledano <arnaldo....@gmail.com> escribi�:

No encuentro la PROPIEDAD � .cSortColumns = "0,4,0"?????????????
Tampoco la lShowTooltips

Arnaldo

El 18/07/2013 11:53 a.m., V�ctor Hugo Esp�nola Dom�nguez escribi�:
Hola Arnaldo

La clave est� en lo que est� a continuaci�n:
"
cSortColumns � debe contener una lista delimitada por comas de n�meros enteros, uno por columna, en la secuencia que las columnas son listadas en cData. Si un dato dado es cero, entonces haciendo Clic sobre su encabezado de columna va a ordenar la lista en esa columna. Si esta contiene un valor positivo, entonces el entero representa el n�mero de la columna a ser ordenada.


Considere este ejemplo:

SELECT OrdenID, OrdenFecha, OrdenCantidad ;
DTOS(OrdenFecha) AS OrdenYMD ;
FROM Ordenes INTO CURSOR ListaOrdenes
WITH THISFORM.MySimpleList
� .cAlias = "ListaOrdenes"
� .cData = "OrdenID,OrdenFecha,OrdenCantidad,OrdenYMD"
� .cColumnHeaders = "No. Orden,Fecha,Cantidad"
� .cColumnWidths = "200,80,100,0"
� .lSorted = .T.
� .cSortColumns = "0,4,0"
� .PopulateList
ENDWITH

En este caso va a mostrar una lista de 4 columnas, que contienen respectivamente el n�mero de orden (OrdenID), la fecha de la orden (OrdenFecha - en el formato SET DATE actual), Cantidad (OrdenCantidad), y Fecha de la orden nuevamente (OrdenYMD - en formato YYYYMMDD).

Nota de la traductora: Al Hacer Clic en el encabezado de la columna Fecha SimpleList advierte que es la columna 2(FechaOrden) y que tiene un n�mero 4 asociado, por tanto, busca la columna 4 (Orden YMD) y establece el orden por los valores de esta columna 4, est� la misma visible o no.
"

Si quieres puedes publicar el c�digo completo y veremos como soluciionarlo.

Saludos,
V�ctor.



El 18 de julio de 2013 10:43, Arnaldo Toledano <arnaldo....@gmail.com> escribi�:
Gracias Victor Hugo, pero no veo concretamente cual es la soluci�n.
Lo hab�a le�do antes y no lo entiendo realmente.

Nota de la traductora:� Por ejemplo, si tiene las fechas: 25-01-01 / 02-03-01 / 30-10-02 / 02-01-03 / 20-03-03. El orden en que le aparecer�n al hacer clic en el encabezado de columna ser� 02-01-03 / 02-03-01 / 20-03-03 / 25-01-01 / 30-10-02 Esto deja ver un orden no deseado en los elementos de la lista.

Al utilizar cSortColumns, puede especificar una columna alternativa para ordenar. Esta puede contener los mismos datos en formato YYYYMMDD. Al establecer el ancho para esta columna alternativa en cero, el usuario no notar� de su presencia.


Es lo que dice.
Pero no alcanzo a interpretarlo correctamente.
Como hace el usuario para ORDENAR por una columna que no se ve ?
O en su defecto, QUE C�DIGO pongo para indexar por esa columna ???


Gracias Victor

Arnaldo Toledano

El 17/07/2013 04:59 p.m., V�ctor Hugo Esp�nola Dom�nguez escribi�:
Hola Arnaldo

Debes agregar una columna auxiliar que contenga DTOS( fecha ), m�s informaci�n en el siguiente enlace:�http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=39

Saludos,
V�ctor.



El 17 de julio de 2013 14:42, Arnaldo Toledano <arnaldo....@gmail.com> escribi�:
Gente.
Utilizo la fecha BRITISH , es decir�� para la fecha de hoy 17/07/2013

En un ListView, cuando hago click en la columna, para que me la ordene por la misma,
me la ordena teniendo en cuenta el d�a.
Es decir queda as�.

31/07/2012
31/05/2012
31/04/2012
30/06/2013
30/05/2013

Alguien tiene alguna IDEA para que al pretender ordenar por dicha columna lo
realice en funci�n del a�o-mes-d�a ?


Gracias de antemano.
--
Arnaldo Toledano
Tesys Inform�tica
C�rdoba
Argentina


--
Arnaldo Toledano Tesys Inform�tica C�rdoba Argentina


--
Arnaldo Toledano Tesys Inform�tica C�rdoba Argentina



--
���� �������

������������������ Ricardo Pina

Desarrollo y Servicios Inform�ticos

����������������� Profesionales
�������������� www.dsip.com.ar

�

�

Ricardo Pina

unread,
Jul 18, 2013, 2:49:28 PM7/18/13
to Grupo VFP
 
Del artículo de VB, acá va, hay que traducirlo
 
Private Sub Form_Load()
    Me.Caption = " Ordenar Listview por columna "
   
    With ListView1
   
        'Agrega cuatro columnas y le asigna el tag a cada una que _
         le indica el tipo de dato que contendrá
   
        .ColumnHeaders.Add(, , "Cadenas").Tag = "STRING"
        .ColumnHeaders.Add(, , "Numeros").Tag = "NUMBER"
        .ColumnHeaders.Add(, , "Fechas").Tag = "DATE"
        .ColumnHeaders.Add(, , "Numeros").Tag = "NUMBER"
       
       
        ' Añade items a cada columna del Listview
       
        Dim i As Long
        Dim numero As Double
        Dim Fecha As Date
        With .ListItems
           
            For i = 1 To 1000
                With .Add(, , " Item " & Format(i, "0000")) ' columna 1
                    numero = (Rnd() * 10000) - 5000
                    Fecha = (Rnd() * 1000) + Date
                    .ListSubItems.Add , , Format(numero, "0.00") ' columna 2
                    .ListSubItems.Add , , Format(Fecha, "dd/mm/yyyy") ' ' columna 3
                    .ListSubItems.Add , , Round(numero) ' columna 4
                   
                End With
            Next i
        End With
       
    End With
End Sub
Private Sub Form_Resize()
    On Local Error Resume Next
    ListView1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
End Sub
'****************************************************************
' Evento al hacer clic en la columna
'----------------------------------------------------------------
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    On Error Resume Next
   
   
    With ListView1
   
        Dim i As Long
        Dim Formato As String
        Dim strData() As String
       
        Dim Columna As Long
       
        Call SendMessage(Me.hwnd, WM_SETREDRAW, 0&, 0&)
       
       
        Columna = ColumnHeader.Index - 1
       
        '''''''''''''''''''''''''''''''''''''''''''''
        ' Tipo de dato a ordenar
        ''''''''''''''''''''''''''''''''''''''''''''''
       
        Select Case UCase$(ColumnHeader.Tag)
   
       
        ' Fecha
        '''''''''''''''''''''''''''''''''''''''''''''
        Case "DATE"
       
            Formato = "YYYYMMDDHhNnSs"
       
            ' Ordena alfabéticamente la columna con Fechas _
              ( es la columna que tiene en el tag el valor DATE )
       
            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
           
            ' Ordena alfabéticamente
           
            .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
           
        ' Datos de numéricos
        '''''''''''''''''''''''''''''''''''''''''''''
        Case "NUMBER"
       
            ' Ordena alfabéticamente la columna con números _
              ( es la columna que tiene en el tag el valor 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
           
            ' Ordena alfabéticamente
           
            .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
   
    Call SendMessage(Me.hwnd, WM_SETREDRAW, 1&, 0&)
    ListView1.Refresh
   
End Sub
Private Function InvNumber(ByVal Number As String) As String
    Static i As Integer
    For i = 1 To Len(Number)
        Select Case Mid$(Number, i, 1)
        Case "-": Mid$(Number, i, 1) = " "
        Case "0": Mid$(Number, i, 1) = "9"
        Case "1": Mid$(Number, i, 1) = "8"
        Case "2": Mid$(Number, i, 1) = "7"
        Case "3": Mid$(Number, i, 1) = "6"
        Case "4": Mid$(Number, i, 1) = "5"
        Case "5": Mid$(Number, i, 1) = "4"
        Case "6": Mid$(Number, i, 1) = "3"
        Case "7": Mid$(Number, i, 1) = "2"
        Case "8": Mid$(Number, i, 1) = "1"
        Case "9": Mid$(Number, i, 1) = "0"
        End Select
    Next
    InvNumber = Number
End Function

Saludos
 


El 18 de julio de 2013 15:40, Arnaldo Toledano <arnaldo....@gmail.com> escribió:
De cual de los dos Articulos ???
Del VB; no veo NADA, tampoco veo nada en el PortalFox


Arnaldo
El 18/07/2013 12:11 p.m., Ricardo Pina escribió:
Hola Arnaldo
 
Creo que te faltó leer más abajo.
Además de agregar el valor al Tag de las columnas tendrías que programar el método Click()
 
Saludos


El 18 de julio de 2013 11:57, Arnaldo Toledano <arnaldo....@gmail.com> escribió:
No encuentro la PROPIEDAD   .cSortColumns = "0,4,0"?????????????
Tampoco la lShowTooltips

Arnaldo

El 18/07/2013 11:53 a.m., Víctor Hugo Espínola Domínguez escribió:
Hola Arnaldo

La clave está en lo que está a continuación:
"
cSortColumns – debe contener una lista delimitada por comas de números enteros, uno por columna, en la secuencia que las columnas son listadas en cData. Si un dato dado es cero, entonces haciendo Clic sobre su encabezado de columna va a ordenar la lista en esa columna. Si esta contiene un valor positivo, entonces el entero representa el número de la columna a ser ordenada.


Considere este ejemplo:

SELECT OrdenID, OrdenFecha, OrdenCantidad ;
DTOS(OrdenFecha) AS OrdenYMD ;
FROM Ordenes INTO CURSOR ListaOrdenes
WITH THISFORM.MySimpleList
  .cAlias = "ListaOrdenes"
  .cData = "OrdenID,OrdenFecha,OrdenCantidad,OrdenYMD"
  .cColumnHeaders = "No. Orden,Fecha,Cantidad"
  .cColumnWidths = "200,80,100,0"
  .lSorted = .T.
  .cSortColumns = "0,4,0"
  .PopulateList
ENDWITH

En este caso va a mostrar una lista de 4 columnas, que contienen respectivamente el número de orden (OrdenID), la fecha de la orden (OrdenFecha - en el formato SET DATE actual), Cantidad (OrdenCantidad), y Fecha de la orden nuevamente (OrdenYMD - en formato YYYYMMDD).

Nota de la traductora: Al Hacer Clic en el encabezado de la columna Fecha SimpleList advierte que es la columna 2(FechaOrden) y que tiene un número 4 asociado, por tanto, busca la columna 4 (Orden YMD) y establece el orden por los valores de esta columna 4, esté la misma visible o no.
"

Si quieres puedes publicar el código completo y veremos como soluciionarlo.

Saludos,
Víctor.



El 18 de julio de 2013 10:43, Arnaldo Toledano <arnaldo....@gmail.com> escribió:
Gracias Victor Hugo, pero no veo concretamente cual es la solución.
Lo había leído antes y no lo entiendo realmente.

Nota de la traductora:  Por ejemplo, si tiene las fechas: 25-01-01 / 02-03-01 / 30-10-02 / 02-01-03 / 20-03-03. El orden en que le aparecerán al hacer clic en el encabezado de columna será 02-01-03 / 02-03-01 / 20-03-03 / 25-01-01 / 30-10-02 Esto deja ver un orden no deseado en los elementos de la lista.

Al utilizar cSortColumns, puede especificar una columna alternativa para ordenar. Esta puede contener los mismos datos en formato YYYYMMDD. Al establecer el ancho para esta columna alternativa en cero, el usuario no notará de su presencia.


Es lo que dice.
Pero no alcanzo a interpretarlo correctamente.
Como hace el usuario para ORDENAR por una columna que no se ve ?
O en su defecto, QUE CÓDIGO pongo para indexar por esa columna ???



Gracias Victor

Arnaldo Toledano

El 17/07/2013 04:59 p.m., Víctor Hugo Espínola Domínguez escribió:
Hola Arnaldo

Debes agregar una columna auxiliar que contenga DTOS( fecha ), más información en el siguiente enlace: http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=39

Saludos,
Víctor.

El 17 de julio de 2013 14:42, Arnaldo Toledano <arnaldo....@gmail.com> escribió:
Gente.
Utilizo la fecha BRITISH , es decir   para la fecha de hoy 17/07/2013

En un ListView, cuando hago click en la columna, para que me la ordene por la misma,
me la ordena teniendo en cuenta el día.
Es decir queda así.

31/07/2012
31/05/2012
31/04/2012
30/06/2013
30/05/2013

Alguien tiene alguna IDEA para que al pretender ordenar por dicha columna lo
realice en función del año-mes-día ?


Gracias de antemano.
--
Arnaldo Toledano
Tesys Informática
Córdoba
Argentina


--
Arnaldo Toledano Tesys Informática Córdoba Argentina


--
Arnaldo Toledano Tesys Informática Córdoba Argentina



--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 


--
Arnaldo Toledano Tesys Informática Córdoba Argentina



--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Víctor Hugo Espínola Domínguez

unread,
Jul 18, 2013, 10:01:20 PM7/18/13
to publicesvfoxpro
Hola Arnaldo

Ante todo te pido disculpa por la respuesta equivocada que te brindé. No leí con suficiente atención el artículo de Portalfox, el cual en realidad se refiere a una clase "SimpleList.vcx" y no al objeto ListView. Pero la clase mencionada está bastante interesante y fácil de implementar.

>No encuentro la PROPIEDAD   .cSortColumns = "0,4,0"?????????????
>Tampoco la lShowTooltips

Esas propiedades son de la clase "simplelist" ;-(

La idea de agregar una columna auxiliar sigue siendo válida, DTOS( fecha )

LPARAMETERS columnheader
olv = thisform.pf1.page1.lv
olv.sorted = .t.
nIndex = ColumnHeader.index 
IF olv.SortOrder = 0
    olv.SortOrder = 1
ELSE
    olv.SortOrder = 0
ENDIF     

*|* this.SortKey=ColumnHeader.Index-1
this.SortKey = Indice de la columna DTOS(fecha) - 1

Saludos,
Víctor.


Víctor Hugo Espínola Domínguez

unread,
Jul 19, 2013, 1:31:14 AM7/19/13
to publicesvfoxpro
Hola Arnaldo

Encontré un ejemplo interesante en la web, lo modifiqué agregándole una columna fecha. Puedes bajarlo del siguiente enlace:  http://www.mediafire.com/download/69nqcoa0n7sk5wp/ListView.rar

Saludos,
Víctor.

Daniel Sánchez

unread,
Jul 19, 2013, 11:10:09 PM7/19/13
to Comunidad de Visual Foxpro en Español

Arnaldo lo que preguntaría es porque no usas un grid que sin ningún problema lograría lo que deseas.

Ariel D'Alfeo

unread,
Jul 21, 2013, 1:17:25 PM7/21/13
to publice...@googlegroups.com
sera que la fecha esta como tipo de dato char? por eso lo ordena por el primer numero
-- 
Ariel D'Alfeo
Córdoba, Argentina

Arnaldo Toledano

unread,
Jul 21, 2013, 1:28:11 PM7/21/13
to publice...@googlegroups.com
Que bárbaro, cuando no sabemos disociar los elementos para lograr una solución ! ! ! !
No se me había ocurrido cambiar el SET DATE.
Puse set date ANSI al inicio y set date british al salir del LV   y problema solucionado.
Gracias Ariel


Arnaldo Toledano
Reply all
Reply to author
Forward
0 new messages