|
Вопрос # 22/ вопрос открыт / |
|
Здравствуйте, подскажите, пожалуйста, как сделать сортировку строк (например, в алфавитном порядке)в StringGrid по какой либо колонке
 |
Вопрос задал: Александр (Alv) (статус: Посетитель)
Вопрос отправлен: 28 мая 2006, 12:37
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: bruder
Здравствуйте, Alv!
Код в приложении. Использовать так: GridSort(StringGrid1, 1);
Удачи!
Приложение: Переключить в обычный режим- procedure GridSort(StrGrid: TStringGrid; NoColumn: Integer);
- var
- Line, PosActual: Integer;
- Row: TStrings;
- begin
- Renglon := TStringList.Create;
- for Line := 1 to StrGrid.RowCount - 1 do
- begin
- PosActual := Line;
- Row.Assign(TStringlist(StrGrid.Rows[PosActual]));
- while True do
- begin
- if (PosActual = 0) or (StrToInt(Row.Strings[NoColumn - 1]) >=
- StrToInt(StrGrid.Cells[NoColumn - 1, PosActual - 1])) then
- Break;
- StrGrid.Rows[PosActual] := StrGrid.Rows[PosActual - 1];
- Dec(PosActual);
- end;
- if StrToInt(Row.Strings[NoColumn - 1]) < StrToInt(StrGrid.Cells[NoColumn -
- 1, PosActual]) then
- StrGrid.Rows[PosActual] := Row;
- end;
- Renglon.Free;
- end;
-
 |
Ответ отправил: bruder (статус: 4-ый класс)
Время отправки: 28 мая 2006, 16:08
|
Ответ #2. Отвечает эксперт: mvp
Моя версия сортировки отличается тем, что можно сортировать в двух направлениях по очереди.
Приложение: Переключить в обычный режим- procedure SortGrid(Grid : TStringGrid; Col : integer; ascend : boolean = false);
- var
- _, __, i : integer;
- s : String;
- begin
- if Col <= Grid.ColCount - 1 then
- begin
- for _:= 1 to Grid.RowCount - 1 do for __:= _+ 1 to Grid1.RowCount - 1 do if ascend and
(StrTOfloat(Grid.Cells[col, _]) > StrTOFloat(Grid.Cells[col, __])) or not ascend and
(StrTOFloat(grid.Cells[col, _]) < StrTOFloat(GRid.Cells[col, __])) then for I := 0 to
Grid.ColCount - 1 do
- begin
- s := GRid.Cells[i, _];
- GRid.Cells[i, _] := GRid.Cells[i, __];
- GRid.Cells[i, __] := s
- end;
- for _:= 0 to Grid.ColCount - 1 do if Grid.Cells[_, 0][length(Grid.Cells[_, 0])] in ['^', 'v'] then
Grid.Cells[_, 0] := copy(Grid.Cells[_, 0], 1, length(GRid.Cells[_, 0]) - 2);
- if ascend then GRid.Cells[col, 0] := GRid.cells[col, 0] + ' v' else GRid.Cells[col, 0] :=
GRid.Cells[col, 0] + ' ^'
- end
- end;
- //------------------------------------------------------------------------------
- procedure TForm1.StringGrid1DblClick(Sender: TObject);
- var
- f : TPoint;
- p, i : integer;
- begin
- f:= StringGrid1.ScreenToClient(Mouse.CursorPos);
- if StringGrid1.MouseCoord(f.X, f.Y).Y <= 0 then
- begin
- SortGrid(StringGrid1, StringGrid1.MouseCoord(f.X, f.Y).x,
boolean(StringGrid1.Cols[Stringgrid1.MouseCoord(f.X, f.Y).X].Objects[0]));
- StringGrid1.Cols[Stringgrid1.MouseCoord(f.X, f.Y).X].Objects[0] := tobject(pointer(not
boolean(StringGrid1.Cols[Stringgrid1.MouseCoord(f.X, f.Y).X].Objects[0])))
- end
- end;
 |
Ответ отправил: mvp (статус: 4-ый класс)
Время отправки: 29 мая 2006, 10:28
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|