Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка в TStringGrid, Не помешала бы Ваша помощь 
:(
    Опции темы
VanClivern
Дата 5.12.2007, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2005

Репутация: нет
Всего: нет



День добрый, господа. 
Вновь обращаюсь к Вам за советом. Значится так:
Имеется TStrinGgrid (6x5). Забиваю туда данные. Нажимаю на кнопочку и, по идее, должна открыться форма с этой же таблицей, но уже отсортированной по некоторому полю. Если же поля одинаковы, то сортировка идет по соседнему. Поля пости все числовые, за исключением 1-го - текст. 

Код

form3.ta.Cells[0,1] := ta.Cells[0,1];
form3.ta.Cells[1,1] := FloatToStr(pro1);
form3.ta.Cells[2,1] := FloatToStr(zab1);
form3.ta.Cells[3,1] := FloatToStr(d1);

form3.ta.Cells[0,1] := ta.Cells[0,2];
form3.ta.Cells[1,1] := FloatToStr(pro2);
form3.ta.Cells[2,1] := FloatToStr(zab2);
form3.ta.Cells[3,1] := FloatToStr(d2);

и т.д.

Знаю, что заполнять таблицу было бы проще циклом, но это уже другой вопрос.
Так вот. Не могли бы Вы подсказать корректный способ сортировки, чтобы сортировались записи
Заранее благодарю.
PM MAIL   Вверх
pavelv
Дата 5.12.2007, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Просто методы чтоли? Ну можно пузырьком, квиксорт, пирамидальная. Если по времени проблем нет бери первый вариант и не грей мозг. Заносишь все твои значения в массив, сортируешь, затем отчищаешь StringGrid и заново данные заносишь. Кстати думаю давно есть компонеты, чтобы после нажатия на колонку сортировка автоматически проводилась 
PM MAIL   Вверх
VanClivern
Дата 5.12.2007, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2005

Репутация: нет
Всего: нет



Цитата

Просто методы чтоли?...Заносишь все твои значения в массив, сортируешь, затем отчищаешь StringGrid и заново данные заносишь


А можно код? Пожалуйста.  smile 

Цитата

Кстати думаю давно есть компонеты, чтобы после нажатия на колонку сортировка автоматически проводилась  


Интересно было бы с ними ознакомиться. 

Это сообщение отредактировал(а) VanClivern - 5.12.2007, 06:47
PM MAIL   Вверх
Poseidon
Дата 5.12.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(VanClivern @  5.12.2007,  06:44 Найти цитируемый пост)
Интересно было бы с ними ознакомиться. 
 VirtualTreeView



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Lexicss
Дата 5.12.2007, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

Репутация: нет
Всего: 1



Цитата(VanClivern @  5.12.2007,  06:44 Найти цитируемый пост)
А можно код? Пожалуйста. 

Пожалуйста. Здесь, например, метод пузырька - http://read.excode.ru/art4490p1.html
--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
VanClivern
Дата 6.12.2007, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2005

Репутация: нет
Всего: нет



Спасибо за помощь. Вот поглядите. Код отрыл:

Procedure GridSort(StrGrid: TStringGrid; NoColumn: Integer);   
Var
    Line, PosActual: Integer;
    Row,Renglon: 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;
    Renglon.free;    
  end;
  end;

Вставляю процедуру в код.
Вызываю ее:
procedure TForm1.Button5Click(Sender: TObject);
begin
gridsort(form3.Ta,3);
end;
и Вылезает ошибка такого содержания:
Accses violation at adress и т.д.
Чего делать ума не приложу. Пожалуйста присоветуйте чего. 
Мне сдаваться завтра.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.