int __fastcall Compare(void *Item1, void *Item2)
{
AnsiString *i1 = (AnsiString*)Item1;
AnsiString *i2 = (AnsiString*)Item2;
return i1->AnsiCompare(*i2);
}
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
if(StringGrid1->Row == 1)
{
TList* myList = new TList();
myList->Clear();
AnsiString* myStr;
for(int i = 0 ;i<StringGrid1->RowCount;i++)
{
AnsiString* myStr = new AnsiString(StringGrid1->Cells[StringGrid1->Col]+";"+StringGrid1->Rows->Text);
myList->Add((void*)myStr);
}
myList->Sort(Compare);
for(int i=0;i<myList->Count;i++)
{
myStr = (AnsiString*)myList->Items;
AnsiString rowString = myStr->SubString(myStr->Pos(";")+1,myStr->Length());
StringGrid1->Rows->Text = rowString;
}
}
}
Сортировка в TStringGrid
У кого-нибудь есть варианты?
Цитата:
Originally posted by GIZMO
У кого-нибудь есть варианты?
У кого-нибудь есть варианты?
Сам не пробовал. Думаю приблизительно так.
Выгружаешь TStringGrid->Rows в TList, причем столбец сортировки должен быть первым. Делаешь TList->Sort(). Выгружаешь из Tlist->Items в TstringGrid->Rows
Цитата:
Originally posted by AlexandrVSmirno
Сам не пробовал. Думаю приблизительно так.
Выгружаешь TStringGrid->Rows в TList, причем столбец сортировки должен быть первым. Делаешь TList->Sort(). Выгружаешь из Tlist->Items в TstringGrid->Rows
Сам не пробовал. Думаю приблизительно так.
Выгружаешь TStringGrid->Rows в TList, причем столбец сортировки должен быть первым. Делаешь TList->Sort(). Выгружаешь из Tlist->Items в TstringGrid->Rows
Приблизительно так. Сортирует по клику в столбце 1 строки.
Код:
Цитата:
Originally posted by AlexandrVSmirno
Приблизительно так. Сортирует по клику в столбце 1 строки.
Приблизительно так. Сортирует по клику в столбце 1 строки.
Код:
int __fastcall Compare(void *Item1, void *Item2)
{
AnsiString *i1 = (AnsiString*)Item1;
AnsiString *i2 = (AnsiString*)Item2;
return i1->AnsiCompare(*i2);
}
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
if(StringGrid1->Row == 1)
{
TList* myList = new TList();
myList->Clear();
AnsiString* myStr;
for(int i = 0 ;i<StringGrid1->RowCount;i++)
{
AnsiString* myStr = new AnsiString(StringGrid1->Cells[StringGrid1->Col]+";"+StringGrid1->Rows->Text);
myList->Add((void*)myStr);
}
myList->Sort(Compare);
for(int i=0;i<myList->Count;i++)
{
myStr = (AnsiString*)myList->Items;
AnsiString rowString = myStr->SubString(myStr->Pos(";")+1,myStr->Length());
StringGrid1->Rows->Text = rowString;
}
}
}
{
AnsiString *i1 = (AnsiString*)Item1;
AnsiString *i2 = (AnsiString*)Item2;
return i1->AnsiCompare(*i2);
}
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
if(StringGrid1->Row == 1)
{
TList* myList = new TList();
myList->Clear();
AnsiString* myStr;
for(int i = 0 ;i<StringGrid1->RowCount;i++)
{
AnsiString* myStr = new AnsiString(StringGrid1->Cells[StringGrid1->Col]+";"+StringGrid1->Rows->Text);
myList->Add((void*)myStr);
}
myList->Sort(Compare);
for(int i=0;i<myList->Count;i++)
{
myStr = (AnsiString*)myList->Items;
AnsiString rowString = myStr->SubString(myStr->Pos(";")+1,myStr->Length());
StringGrid1->Rows->Text = rowString;
}
}
}
Спасибо. Сделал примерно тоже, но только с TStringList
Код:
...
myStr = new AnsiString(SG->Rows->Text);
myList->AddObject(SG->Cells[Col], (TObject*)myStr);
...
myStr = new AnsiString(SG->Rows->Text);
myList->AddObject(SG->Cells[Col], (TObject*)myStr);
...
так не нужно задаваться "разделяющим символом"(у Вас - ;). Вдруг кто-то захочет его ввести в ячейку? По скорости чуууть медленнее (на табл. из 5-ти столбцов и 20000 строк).
Единственное, что осталось выяснить: - "А чистить ничего не надо?". myList вроде однозначно надо шлепнуть или вынести как датамембер. А вот чего там у AnsiString, за конструкторы и операторы приведения надо посмотреть...