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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2009, 19:35   #1
Xataby4
 
Регистрация: 10.01.2009
Сообщений: 6
Вопрос Сортировка в StringGrid с параметрами строки

Здравствуйте уважаемые программисты!!!
Я пишу программу с использованием комопнента StirngGrid и уже много перерыл поиском тем на этом форуме по сортировке в таблице, но у меня совсем другая заморочка, вот допустим у меня введено в stringGrid:

имя: возраст: вес:
миша 5 25
вова 3 7
аня 8 34
таня 5 16

а по нажатию на Button1 должно стать:

имя: возраст: вес:
аня 8 34
вова 3 7
миша 5 25
таня 5 16
ну то есть отсортировать по имени то есть по первой колонке и выстроить всех по очереди, ПРИЧЕМ КАЖДОМУ ИМЕНИ ДОЛЖНЫ ОСТАТЬСЯ ВСЕ ЗНАЧЕНИЯ КАК И БЫЛИ!!!!

Помогите плизззз!!!! Очень на вас расчитываю, если можно то сразу код.
Xataby4 вне форума Ответить с цитированием
Старый 11.01.2009, 20:55   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
у меня совсем другая заморочка
Да нет тут ничего оригинального...
Как сортировать, вы почитали. Ну и пожалуйста, берите и сортируйте ячейки первого столбца - с именами, только не забывайте одновременно передвигать и все другие ячейки одного и того же ряда.
Цитата:
если можно то сразу код
Такое у нас пишут в разделе "Помощь студентам". А этот раздел - "Общие вопросы Delphi" - для тех, кто хочет написать программу сам...

P.S.
Другой способ (для ленивых) - переписать все данные из StirngGrid построчно (целиком Row) в листбокс с установленным свойством сортировки, а потом из него перенести данные из строк обратно в StirngGrid, но уже в упорядоченном виде. Не забудьте только придумать оригинальный разделитель, чтобы не затрудниться с выделением данных по ячейкам одной строки. Или морочиться с колонками листбокса...

Последний раз редактировалось mihali4; 11.01.2009 в 20:57.
mihali4 вне форума Ответить с цитированием
Старый 11.01.2009, 21:00   #3
Xataby4
 
Регистрация: 10.01.2009
Сообщений: 6
По умолчанию

НУ Михалыч, релаьно , ну я знаю что ты best прогер, помоги пожалуйста, времени просто нету, а прогу завтра сдавать срочняк надл нет времени уже переносит в другой, раздел, дай пожалуйста код. Очень на тебя надеюсь!!! Заранее спасибо!!!(P.s я знаю что ты человек не с холодным сердцем)

вот я вот нарыл код:
Код:
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;

ну все вставляю, но дельфи кричит на Renglon - не знаю как ее объявить, помогите если че не так!?

Последний раз редактировалось Stilet; 31.07.2011 в 20:12.
Xataby4 вне форума Ответить с цитированием
Старый 11.01.2009, 21:37   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Renglon должен быть нормальным листбоксом, кинутым на форму (можно сделать ему визибле фолс).
mihali4 вне форума Ответить с цитированием
Старый 17.01.2009, 19:36   #5
Xataby4
 
Регистрация: 10.01.2009
Сообщений: 6
По умолчанию

НУ все равно кидаю ListBox прописываю в коде а дельфи кричит на строку Renglon := TStringList.Create; ну меняю ее на ListBox1 := TStringList.Create; все равно кричит
Вот из нарытого кода:
Код:
 
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;
по вашему совету делаю:
Код:
Procedure GridSort(StrGrid: TStringGrid; NoColumn: Integer); 
Var Line, PosActual: Integer; 
Row: TStrings; 
begin 
ListBox1 := 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; 
ListBox1.Free; 
end;
ВСе равно Дельфи кричит! Помогите, оч надо!!!!!! Плизззз!!!!

так ну ответит ли кто-нить или нет?

Последний раз редактировалось Stilet; 31.07.2011 в 20:16.
Xataby4 вне форума Ответить с цитированием
Старый 17.01.2009, 20:30   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

не нужен никакой листбокс. просто добавьте в var Renglon: TStringList;
И сортировка чисел тут у Вас. Вот поправил под имена:
Код:
procedure GridSort(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 = 0) or
         (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;
Сортировка вызывается так:
GridSort(StringGrid1, 0);
pu4koff вне форума Ответить с цитированием
Старый 17.01.2009, 20:48   #7
Xataby4
 
Регистрация: 10.01.2009
Сообщений: 6
По умолчанию

Спасибо большое pu4koff!!!! Тему можно закрывать!!!

А можете подсказать еще как умножать ячейки между собой??? Пожалуйста!!! (p.s. искал по форуму - не нашел)!

Последний раз редактировалось Stilet; 31.07.2011 в 20:18.
Xataby4 вне форума Ответить с цитированием
Старый 17.01.2009, 22:13   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

StringGrid1.Cells[0,2] := IntToStr(StrToInt(StringGrid1.Cells[0,0]) * StrToInt(StringGrid1.Cells[0,1])).
В ячейку (0,2) записываем результат произведения ячеек (0,0) и (0,1)
ЗЫ. По правилам форума: 1 тема - 1 вопрос
pu4koff вне форума Ответить с цитированием
Старый 30.07.2011, 16:27   #9
Sheeby
Пользователь
 
Регистрация: 21.04.2011
Сообщений: 20
По умолчанию

всем привет! а под какой компонент вводить этот самый GridSort?
Sheeby вне форума Ответить с цитированием
Старый 31.07.2011, 20:19   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тоесть? Это функция для сортировки колонок в компоненте StringGrid
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение строки (canvas) в StringGrid elfo Помощь студентам 1 24.06.2008 12:12
StringGrid и сортировка dee_lv Помощь студентам 5 02.05.2008 17:51
Сортировка с доп параметрами. Хелп Ice_Juice Microsoft Office Excel 22 15.03.2008 20:21
Delphi: Сортировка строк в StringGrid, критерий - элемент ячейки Andris Помощь студентам 9 09.03.2008 23:04
StringGrid - при пометке строки ставить значок на столбце Mick Standarov Компоненты Delphi 2 03.10.2007 23:26