Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.07.2010, 18:36
demar demar вне форума
Прохожий
 
Регистрация: 04.07.2010
Сообщения: 3
Репутация: 10
Сообщение Сортировать все строки (! ОТДЕЛЬНО !) StringGrida

Подскажите пожалуйста как отсортировать все строки по отдельности в StringGridе, к примеру

есть:
5 2 1
2 5 3
8 2 1

надо:
1 2 5
2 3 5
1 2 8


.
Ответить с цитированием
  #2  
Старый 05.07.2010, 00:05
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Пробегаешься по строкам, для каждой строки пробегаешься по ее элементам загоняя их в массив чисел. Сортируешь массив любым известным тебе методом, записываешь массив в эту строку.
Ответить с цитированием
  #3  
Старый 07.07.2010, 23:07
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Как вариант :

Код:
procedure StringGrid_SortCol(SG : TStringGrid; HideSGBefore : boolean; ACol : integer; TypeCol : integer);
{Сортировка по заданному столбцу}
{HideSGBefore - скрыть на время процесса}
{ACol - номер столбца}
{TypeCol - тип столбца}
Var
  Vis,YesGreate : Boolean;
  X1,X2 : real;
  S1,S2,S0 : string;
  ListS : TStrings;
  Res,N,k,j,i : LongInt;
begin
  if SG<>NIL then begin
     if SG.RowCount>1 then begin
        if (ACol>=0) and (ACol<SG.ColCount) then begin
           Vis:=SG.Visible;
           if HideSGBefore then SG.Visible:=FALSE;
           ListS:=TStringList.Create;
           TRY
             N:=SG.RowCount-1;
             for i:=1 to N do
               begin
                 k:=N-i;
                 for j:=1 to k do
                  begin

                    YesGreate := FALSE;

                    S1:=SG.Cells[ACol,j];
                    S2:=SG.Cells[ACol,j+1];
                    S1:=Trim(S1);
                    S2:=Trim(S2);
                    {[1,6,11,14]}

                    if TypeCol=(-1) then begin    //тип столбца : строка UpCase
                       S1:=AnsiUpperCase(S1);
                       S2:=AnsiUpperCase(S2);
                       if S1>S2 then begin
                          YesGreate := TRUE;
                       end;
                    end;

                    if TypeCol=0 then begin   //тип столбца : строка
                       if S1>S2 then begin
                          YesGreate := TRUE;
                       end;
                    end;


                    if TypeCol=1 then begin    //тип столбца : число
                       Val(S1,X1,Res);
                       Val(S2,X2,Res);
                       if X1>X2 then begin
                          YesGreate := TRUE;
                       end;
                    end;

                    if YesGreate then begin
                       ListS.Assign(SG.Rows[j]);
                       SG.Rows[j].Assign(SG.Rows[j+1]);
                       SG.Rows[j+1].Assign(ListS);
                    end;
                 end;
             end;
           FINALLY
             if ListS<>NIL then begin
                ListS.Free;
             end;
             ListS:=NIL;
             SG.Visible:=Vis;
           END;
        end;
     end;
  end;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter