А тебе StringGrid обязательно? А то удобнее все-таки пользоваться TListView. И красивше

И кликать можно по заголовкам стобцов для сортировки.
А в приципе, можно делать так:
Код:
procedure TForm1.ExchangeItems(I,J : Integer);
begin
// Маняет местами строки грида под номерами I и J
// Напишешь сам, там просто.
end;
function TForm1.CompareItems(I, J :Integer; CmpCol : Integer) : Integer;
begin
// Функция, сравнивающая 2 строки по указанной колонке
// Возвращает 0 если равны, -1 если I < J и 1, если I > J
// Тоже напишешь сам
end;
procedure TForm1.SortItems(CmpCol : Integer);
var
I, J : Integer;
begin
// Собственно, сортировка
For I := 0 To StringGrid1.RowCount-1 Do
For J := I + 1 To StringGrid.RowCount-1 Do
If CompareItems(I,J,CmpCol) = 1 Then
ExchangeItems(I,J);
end;