![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
При сортировке stringgrid опускает отсортированные данные ниже, пробовал разные варианты, не помогает.
помогите сделать, чтобы помле сортировки ставил отсортированные данные также с 1 ячейки. |
|
#2
|
||||
|
||||
|
В StringGrid нумерация строк и столбцов идет от 0, тоесть StringGrid.Cells[0,0], StringGrid.Rows[0], и тд.
|
|
#3
|
|||
|
|||
|
С 0 делал, но тогда вообще данные часть не сортируется, а асть скрывается
|
|
#4
|
||||
|
||||
|
Код:
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
const
TheSeparator = '@';
var
CountItem, I, J, K, ThePosition: integer;
MyList: TStringList;
MyString, TempString: string;
begin
CountItem := GenStrGrid.RowCount;
MyList := TStringList.Create;
MyList.Sorted := False;
try
begin
for I := 1 to (CountItem - 1) do
MyList.Add(GenStrGrid.Rows[I-1].Strings[ThatCol] + TheSeparator + //тут
GenStrGrid.Rows[I-1].Text);
Mylist.Sort;
for K := 1 to Mylist.Count do
begin
MyString := MyList.Strings[(K - 1)];
ThePosition := Pos(TheSeparator, MyString);
TempString := '';
{Eliminate the Text of the column on which we have sorted the StringGrid}
TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
MyList.Strings[(K - 1)] := TempString;
end;
for J := 1 to (CountItem - 1) do
GenStrGrid.Rows[J-1].Text := MyList.Strings[(J - 1)]; // тут
end;
finally
MyList.Free;
end;
end; Не думаю, что этот метод намного быстрее будет. |
|
#5
|
|||
|
|||
|
да, моя пузырьковый метод. Меняем местами значения, переставляя по возрастанию.
Страшный ты код выложил, уж очень огромный. Там же можно всего 3-мя строчками отсортировать ![]() |
|
#6
|
||||
|
||||
|
??? Так это твой код, просто переделанный
мой код вот: Код:
procedure TForm1.Button2Click(Sender: TObject);
var rc,cc:integer;
s:string;
b:boolean;
begin
b:=true;
repeat
b:=false;
for rc:=0 to StringGrid1.RowCount-2 do begin
for cc:=0 to StringGrid1.ColCount-1 do begin
if (StringGrid1.Cells[cc,rc]>StringGrid1.Cells[cc,rc+1]) and (StringGrid1.Cells[cc,rc+1]<>'') then
begin
b:=true;
s:=StringGrid1.Cells[cc,rc];
StringGrid1.Cells[cc,rc]:=StringGrid1.Cells[cc,rc+1];
StringGrid1.Cells[cc,rc+1]:=s;
end;
end;
end;
until b=false;
end; |