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.