| 
| 
 | Вопрос # 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] + ' ^'	endend;//------------------------------------------------------------------------------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 thenbegin		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])))	endend;
|  | Ответ отправил: mvp (статус: 4-ый класс)Время отправки: 29 мая 2006, 10:28
 
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |