| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Сортировка в TStringGrid |
| Автор: VanClivern 5.12.2007, 05:38 | ||
| День добрый, господа. Вновь обращаюсь к Вам за советом. Значится так: Имеется TStrinGgrid (6x5). Забиваю туда данные. Нажимаю на кнопочку и, по идее, должна открыться форма с этой же таблицей, но уже отсортированной по некоторому полю. Если же поля одинаковы, то сортировка идет по соседнему. Поля пости все числовые, за исключением 1-го - текст.
и т.д. Знаю, что заполнять таблицу было бы проще циклом, но это уже другой вопрос. Так вот. Не могли бы Вы подсказать корректный способ сортировки, чтобы сортировались записи Заранее благодарю. |
| Автор: pavelv 5.12.2007, 06:10 |
| Просто методы чтоли? Ну можно пузырьком, квиксорт, пирамидальная. Если по времени проблем нет бери первый вариант и не грей мозг. Заносишь все твои значения в массив, сортируешь, затем отчищаешь StringGrid и заново данные заносишь. Кстати думаю давно есть компонеты, чтобы после нажатия на колонку сортировка автоматически проводилась |
| Автор: VanClivern 5.12.2007, 06:44 | ||||
А можно код? Пожалуйста.
Интересно было бы с ними ознакомиться. |
| Автор: Poseidon 5.12.2007, 15:26 |
| VirtualTreeView |
| Автор: Lexicss 5.12.2007, 21:23 |
Пожалуйста. Здесь, например, метод пузырька - http://read.excode.ru/art4490p1.html |
| Автор: VanClivern 6.12.2007, 08:10 |
| Спасибо за помощь. Вот поглядите. Код отрыл: 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 и т.д. Чего делать ума не приложу. Пожалуйста присоветуйте чего. Мне сдаваться завтра. |