Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 12:20   #1
chex01
Пользователь
 
Аватар для chex01
 
Регистрация: 06.03.2011
Сообщений: 31
Лампочка Сортировка в StringGrid

Доброго времени суток!
Есть StringGrid, в нём два столбца(Ф.И.О. и Цифра). Данный код осуществляет сортировку по первому столбцу:
Код:
procedure GridSort2(StrGrid: TStringGrid; NoColumn: Integer);
var
  Line, PosActual: Integer;
  Row: TStringList;
  Renglon :TStringList;
begin
  Renglon := TStringList.Create;
  Row := TStringList.Create;
  for Line := 1 to StrGrid.RowCount-1 do
  begin
    PosActual := Line;
    Row.Assign(StrGrid.Rows[PosActual]);
    while True do
    begin
      if (PosActual = 1) or    //if 1 не сортировать первую строчку
         (Row.Strings[NoColumn] >= StrGrid.Cells[NoColumn,PosActual-1])
        then break;
      StrGrid.Rows[PosActual] := StrGrid.Rows[PosActual-1];
      Dec(PosActual);
    end;
    if (Row.Strings[NoColumn] < StrGrid.Cells[NoColumn,PosActual])
      then StrGrid.Rows[PosActual].Assign(Row);
  end;
  Row.Free;
  Renglon.Free;
end;
Что в нём нужно изменить, что бы сортировка была по второму столбцу?
chex01 вне форума Ответить с цитированием
Старый 05.04.2012, 12:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
procedure GridSort2(StrGrid: TStringGrid; NoColumn: Integer);
Что в нём нужно изменить, что бы сортировка была по второму столбцу?
в нём - НИЧЕГО.

А чтобы сортировало по второму столбцу, очевидно, что вызвать процедуру с параметром, равным ВТОРОМУ столбцу:
Код:
  GridSort2( StringGrid1 { <-- указать ВашГрид }, 1 { <-- номер второго столбца} );
p.s. учтите, что строки сравниваются именно как строки, поэтому строчка '3' будет старше, чем строчки: '1', '123' и даже '1000000'!

Последний раз редактировалось Serge_Bliznykov; 05.04.2012 в 12:56.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2012, 13:11   #3
chex01
Пользователь
 
Аватар для chex01
 
Регистрация: 06.03.2011
Сообщений: 31
Печаль

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. учтите, что строки сравниваются именно как строки
Второй столбик цифры, ну кроме первой строчки, там что то типо заголовка. Можно как нибудь по другому?

з.ы. знаю, что не положено, но всё же задам дополнительный вопрос в этой теме. Как сделать ячейки [0,0] и [1,0] жирными и выравниванием
посередине
chex01 вне форума Ответить с цитированием
Старый 05.04.2012, 14:11   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Второй столбик цифры, ну кроме первой строчки, там что то типо заголовка. Можно как нибудь по другому?
ну тогда попробуйте заменить код:
Цитата:
Код:
      if (PosActual = 1) or    //if 1 не сортировать первую строчку
         (Row.Strings[NoColumn] >= StrGrid.Cells[NoColumn,PosActual-1])
        then break;
на такой:
Код:
      if (PosActual = 1) or    //if 1 не сортировать первую строчку
         (StrToFloatDef(Row.Strings[NoColumn],0) >= StrToFloatDef(StrGrid.Cells[NoColumn,PosActual-1],0))
        then break;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2012, 19:41   #5
chex01
Пользователь
 
Аватар для chex01
 
Регистрация: 06.03.2011
Сообщений: 31
Стрелка

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну тогда попробуйте заменить код
Попробовал, сортировка происходит, но значения поднимаясь вверх затирают друг друга. (*никто не понял*)
Прикреплю лучше исходник. Если не сложно, помогите пожалуйста.

Опция сортировки становится доступной после нажатию на кнопку "Получить данные"

Я так понял никто не знает как решить эту проблему.
Вложения
Тип файла: zip Анализатор рейтинга.zip (53.2 Кб, 7 просмотров)

Последний раз редактировалось Stilet; 08.04.2012 в 20:56.
chex01 вне форума Ответить с цитированием
Старый 08.04.2012, 20:57   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Неправильно понял. Интернет знает:
http://delphiworld.narod.ru/base/sg_col_sort.html
http://delphiworld.narod.ru/base/sl_custom_sort.html
http://delphiworld.narod.ru/base/sg_sort3.html
http://delphiworld.narod.ru/base/tst..._val_sort.html
Выбирай метод )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка в stringgrid Илья71 Помощь студентам 3 06.06.2011 14:33
StringGrid сортировка Gregorian Помощь студентам 1 26.02.2010 08:33
Сортировка в Stringgrid сер4ей Помощь студентам 1 24.02.2010 14:40
Сортировка в StringGrid Ch00kan0ff Общие вопросы C/C++ 2 24.03.2009 18:09