Witam
Chciałem przedstawić mój sposób na rozwiązanie sortowania rosnąco i malejąco może komuś się przyda:
Na początek tworzymy dwie zmienne które będą pamiętać która kolumna będzie sortowana (
int col), oraz zmienna odpowiedzialna za sortowanie rosnÄ…co czy majelÄ…co (
bool desc)
Plik źródłowy np. Unit1.h
- Kod: Zaznacz cały
public:
int col;
bool desc;
Następnie w pliku datamodule.cpp tworzymy funkcję która będzie sortowała
Plik datamodule.cpp
- Kod: Zaznacz cały
void __fastcall TDataModule::Sort(TClientDataSet *DataSet,String FieldName, bool desc, int col)
{
String IndexName;
TIndexOptions IndexOptions;
if (desc)
{
IndexOptions << ixDescending;
IndexName = IntToStr(col)+"ix_d";
}
else
{
IndexOptions >> ixDescending;
IndexName = IntToStr(col)+"ix_a";
}
DataSet->AddIndex(IndexName, FieldName, IndexOptions);
DataSet->IndexDefs->Update();
DataSet->IndexName = IndexName;
DataSet->First();
}
Następnie przypisujemy zmiennym wcześniej utworzonym wartości
Plik unit1.cpp
- Kod: Zaznacz cały
__fastcall TForm::TForm(TComponent* Owner)
: TForm(Owner)
{
desc = true;
col = 1;
}
//---------------------------------------------------------------------------
oraz w zdarzeniu OnTitleClick
Plik unit1.cpp
- Kod: Zaznacz cały
void __fastcall TForm::DBTitleClick(TColumn *Column)
{
String file;
DataModule->ClientDataSet->IndexFieldNames = Column->FieldName;
file = Column->FieldName;
if (Column->ID == col)
desc = !desc;
col = Column->ID;
DataModule->Sort(DM->ClientDataSet ,file+"; data",desc,col);
}
Po utworzeniu tych zapisów będziemy mogli dynamicznie sortować wszystkie tabele DBGrid