Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/54: Рейтинг темы: голосов - 54, средняя оценка - 4.59
 Аватар для Sammy_13
0 / 0 / 0
Регистрация: 31.03.2011
Сообщений: 20

Сортировка по алфавиту StringGrid

12.12.2011, 14:43. Показов 10886. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите пожалуйста.
мне надо отсортировать по алфавиту,но у меня сортируется только 1 столбец,надо чтобы вместе с ним отсортировывались другие...потому что 1столбец-фамили,остальные оценки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.BitBtn4Click(Sender: TObject);
 var
i, j: Integer;
lTmpStr: string; 
begin 
for i := 0 to StringGrid1.RowCount - 1 do 
begin 
for j := i + 1 to StringGrid1.RowCount - 1 do 
if StringGrid1.Cells[0, i] > StringGrid1.Cells[0, j] then 
begin 
lTmpStr := StringGrid1.Cells[0, i]; 
StringGrid1.Cells[0, i] := StringGrid1.Cells[0, j];
StringGrid1.Cells[0, j] := lTmpStr;
end; 
end; 
end;
 Комментарий модератора 
Теги кода добавлены модератором. По правилам форума, код должен быть оформлен соответствующими тегами. Для оформления кода Delphi следует выделить этот код и на панели редактирования сообщения нажать кнопку: "DELPHI".
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2011, 14:43
Ответы с готовыми решениями:

сортировка по алфавиту в StringGrid
Всем Здравствуйте!!! помогите пожалуйста с сортировкой по алфавиту. единственно должно быть исключение первых символов. есть записи...

Сортировка StringGrid по алфавиту
Подскажите как отсортировать stringgrid по алфавиту!

Сортировка по алфавиту
Можете помочь. Есть таблица, stringGrid, в ней нужно сделать сортировку по названию от а до я при нажатии на соответствующую кнопку. Что...

5
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
12.12.2011, 15:05
Могу предложить способ сортировки по столбцу с соответствующей перестановкой строк.
Если, пока нет достаточного опыта работы с указателями и экземплярами классов (объектами), то этот способ может показаться сложным.
---
Идея алгоритма такая. Мы создаём список типа TStringList - с помощью него будем сортировать. Каждый элемент такого списка на самом деле представляет собой пару: строка + объект. Мы этим воспользуемся и в качестве строк в такие пары будем записывать значения из ячеек того столбца, по которому требуется выполнить сортировку. А в качестве объектов таких пар будем прикреплять целиком соответствующие строки таблицы. Потом отсортируем список по алфавиту. При этом вместе со строками перестановкам подвергнутся и связанные с ними объекты (строки таблицы). После этого переписываем отсортированные строки обратно - из списка в таблицу.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//Сортировка строк таблицы по значениям ячеек в столбце с заданным индексом.
//Сортировка производится в алфавитном порядке и по цифрам: 0..9
//- согласно кодировочной таблице.
//Фиксированные строки сортировке не подвергаются.
procedure SgSort(aSg : TStringGrid; const aCol : Integer);
var
  SlSort, SlRow : TStringList;
  i, j : Integer;
begin
  //Сортируемый список.
  SlSort := TStringList.Create;
 
  //Добавляем в сортируемый список пары: "строка - объект".
  //В качестве строки будем записывать значения ячеек того
  //столбца, по которому надо провести сортировку. Будем брать те ячейки, которые
  //не принадлежат фиксированным строкам - чтобы не подвергнуть сортировке
  //шапку таблицы, если она есть.
  //А в качестве объекта будем присоединять копии соответствующих строк таблицы.
  for i := aSg.FixedRows to aSg.RowCount - 1 do begin
    //Создаём контейнер для копии строки таблицы.
    SlRow := TStringList.Create;
    //Копируем строку таблицы в контейнер.
    SlRow.Assign(aSg.Rows[i]);
    //Добавляем в сортируемый список пару:
    //строка: строка из ячейки целевого столбца;
    //объект: контейнер, содержащий копию строки таблицы.
    SlSort.AddObject(aSg.Cells[aCol, i], SlRow);
  end;
 
  //Сортируем столбец.
  SlSort.Sort;
 
  //Возвращаем в таблицу строки, отсортированные по столбцу с номером aCol.
  j := 0;
  for i := aSg.FixedRows to aSg.RowCount - 1 do begin
    //Берём очередной контейнер.
    SlRow := Pointer(SlSort.Objects[j]);
    //Записываем содержимое контейнера в строку таблицы.
    aSg.Rows[i].Assign(SlRow);
    //Уничтожаем контейнер.
    SlRow.Free;
    //Следующий индекс списка.
    Inc(j);
  end;
 
  //Уничтожаем сортируемый список.
  FreeAndNil(SlSort);
end;
 
//Пример использования.
procedure TForm1.Button1Click(Sender: TObject);
begin
  //В Edit1.Text записан индекс столбца таблицы, по которому
  //требуется выполнить сортировку.
  SgSort( StringGrid1, StrToIntDef( Edit1.Text, 0 ) );
end;
5
0 / 0 / 0
Регистрация: 23.12.2013
Сообщений: 30
07.05.2014, 19:39
Цитата Сообщение от Mawrat Посмотреть сообщение
SlSort.AddObject(aSg.Cells[aCol, i], SlRow);
Я не совсем понел откуда acol берется, растолкуйте пожалуйста
0
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
07.05.2014, 19:55
aCol - это второй параметр функции:
Delphi
1
2
3
4
5
//Сортировка строк таблицы по значениям ячеек в столбце с заданным индексом.
//Сортировка производится в алфавитном порядке и по цифрам: 0..9
//- согласно кодировочной таблице.
//Фиксированные строки сортировке не подвергаются.
procedure SgSort(aSg : TStringGrid; const aCol : Integer);
aCol - это индекс того столбца, по которому надо выполнить сортировку. Индексация столбцов идёт от нуля.
1
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
08.01.2018, 00:02
//Сортировка строк таблицы по значениям ячеек в столбце с заданным индексом.
//Сортировка производится в алфавитном порядке и по цифрам: 0..9
//- согласно кодировочной таблице.
//Фиксированные строки сортировке не подвергаются.
Добрый день. А как сделать сортировку по возрастанию если значение в цифрах больше 9. Т.е. у меня например 250 строк.
А то сейчас получается так:
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
08.01.2018, 00:05
Myrus, загонять строки в стринглист и применять метод CustomSort, где применять сортировку чисел, а не строк
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2018, 00:05
Помогаю со студенческими работами здесь

Сортировка по алфавиту
как мне перегнать из файла значения "Номер тел." "Фамилия" "Адрес" в компонент Memo, отсортировать по алфавиту и вернуть значения в...

Сортировка по алфавиту
В переменной qtrue содержатся данные типа : Акабан Москва Сидней Ростов. Необходимо отсортировать их по алфавиту и удалить пробелы, чтобы...

Сортировка по алфавиту
Друзья, подскажите как можно ускорить вариант сортировки файлов по алфавиту: В текстовом файле строки вот такого плана: Борисов...

Сортировка по алфавиту
надо отсортировать список по алфавиту unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,...

Сортировка по алфавиту
Проблема: Есть таблица, stringGrid, в ней нужно сделать сортировку, допустим по названию. Или сортировку в файле .тхт , где каждая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru