mam następujący problem. Wypełniam obiekt ListView danymi pobieranymi z bazy danych. Oprócz tego co jest prowadzane do ListView, są do dodatkowej tablicy pobierane indeksy wczytywanych do ListView rekordów.
KOD cpp: UKRYJ
iRows={ilość rekordów};
wordL=new int[iRows+1];
wordL[0]=iRows;
for (int fd = 0; fd < iRows; fd++)
{
{baza danych}.setRow(fd);
List = ListF->Items->Add();
List->Caption={baza danych}.fieldValue("Pole 1");
List->SubItems->Add({baza danych}.fieldValue("Pole 2"));
wordL[fd+1]={baza danych}.fieldValue("idRec");
}
wordL=new int[iRows+1];
wordL[0]=iRows;
for (int fd = 0; fd < iRows; fd++)
{
{baza danych}.setRow(fd);
List = ListF->Items->Add();
List->Caption={baza danych}.fieldValue("Pole 1");
List->SubItems->Add({baza danych}.fieldValue("Pole 2"));
wordL[fd+1]={baza danych}.fieldValue("idRec");
}
Teraz zależy mi na tym aby podczas sortowania ListView elementy z tablicy indeksów wordL także odpowiednio zmieniły miejsce. Tzn, jeżeli trzeci element ListView zostanie zamieniony w wyniku sortowania z np. pierwszym to aby wordL[3] zamienił się miejscami z wordL[1].
Próbowałem to osiągnąć porzez dodanie paru linii kodu do procedury sortowania ListView, ale to niestety nie działa (użycie ...Index+1 wiąże sie z tym że w elemencie wordL[0] przechowuję ilość elementów tablicy.
KOD cpp: UKRYJ
void __fastcall TFZestawyFiszek::ListMagazynCompare(TObject *Sender,
TListItem *Item1, TListItem *Item2, int Data, int &Compare)
{
int iTemp;
if(((TListView *)Sender)->Tag == 0)
{
Compare = CompareText(Item1->Caption, Item2->Caption);
}
else
{
int c = ((TListView *)Sender)->Tag - 1;
Compare = CompareText(Item1->SubItems->Strings[c], Item2->SubItems->Strings[c]);
}
if (Compare < 0 && Data == 1)
{
iTemp=wordL[Item1->Index+1];
wordL[Item1->Index+1]=wordL[Item2->Index+1];
wordL[Item2->Index+1]=iTemp;
} else
if (Compare>0 && Data == 0)
{
iTemp=wordL[Item2->Index+1];
wordL[Item2->Index+1]=wordL[Item1->Index+1];
wordL[Item1->Index+1]=iTemp;
}
if(Data == 1) Compare = -Compare;
}
TListItem *Item1, TListItem *Item2, int Data, int &Compare)
{
int iTemp;
if(((TListView *)Sender)->Tag == 0)
{
Compare = CompareText(Item1->Caption, Item2->Caption);
}
else
{
int c = ((TListView *)Sender)->Tag - 1;
Compare = CompareText(Item1->SubItems->Strings[c], Item2->SubItems->Strings[c]);
}
if (Compare < 0 && Data == 1)
{
iTemp=wordL[Item1->Index+1];
wordL[Item1->Index+1]=wordL[Item2->Index+1];
wordL[Item2->Index+1]=iTemp;
} else
if (Compare>0 && Data == 0)
{
iTemp=wordL[Item2->Index+1];
wordL[Item2->Index+1]=wordL[Item1->Index+1];
wordL[Item1->Index+1]=iTemp;
}
if(Data == 1) Compare = -Compare;
}
Czy ktoś ma jakiś pomysł jak to poprawnie zaimplementować?