Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-06-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Ordenar TListView

Con C++ Builder 6. Quiero ordenar un TListView en función de la etiqueta de la columna que pulse. Estoy usando este código:
Código:
void __fastcall TfSocios::FormCreate(TObject *Sender)
{
     LastSortedColumn = -1;
     Ascending = false;
}
//---------------------------------------------------------------------------

void __fastcall TfSocios::ListaColumnClick(TObject *Sender, TListColumn *Column)
{
     if (Column->Index == LastSortedColumn)
          Ascending = !Ascending;
     else
     {
          Ascending = true;
          LastSortedColumn = Column->Index;
     }
     static_cast<TListView>(Sender)->CustomSort(SortByColumn, Column->Index);
}
//---------------------------------------------------------------------------
Y esta es la función a la que llamo:
Código:
int  __stdcall SortByColumn(long Item1,long Item2, long Data)
{
     TListItem *item1    = reinterpret_cast<TListItem>(Item1);
     TListItem *item2    = reinterpret_cast<TListItem>(Item2);
     TListView *lv       = static_cast<TListView>(item1->ListView);
     TListColumn *lc     = static_cast<TListColumn>(lv->Columns->FindItemID(Data));
     bool bCampoNumerico = lc->Tag;
     int w;

     if (Data == 0)
     {
          w = !bCampoNumerico
              ? AnsiCompareText(item1->Caption, item2->Caption)
              : item1->Caption.ToIntDef(0) - item2->Caption.ToIntDef(0);
     }
     else
     {
          w = !bCampoNumerico
              ? AnsiCompareText(item1->SubItems->Strings[Data-1], item2->SubItems->Strings[Data-1])
              : item1->SubItems->Strings[Data-1].ToIntDef(0) - item2->SubItems->Strings[Data-1].ToIntDef(0);
     }
     return Ascending ? w : -w;
}
El problema es que da lo mismo las veces que pulse en la etiqueta de la columna: Sí me ordena por la columna seleccionda pero siempre en orden descendente; no hay manera de que lo haga al revés. Y es que no veo como usar esa variable Ascending en la que se indica la forma de ordenación.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TListView ColumnHeader arantzal Varios 0 14-02-2007 15:49:48
TListView calogero Varios 0 18-01-2007 17:16:45
Dibujando en un TListView pepon386 Gráficos 1 20-01-2006 09:36:28
Tlistview Yenifer Varios 1 18-08-2004 16:33:44
TlistView perceptron OOP 2 04-12-2003 23:56:15


La franja horaria es GMT +2. Ahora son las 04:28:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi