Ver Mensaje Individual
  #1  
Antiguo 03-06-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
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