![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Численная сортировка [D6, WinXP]
Василич © (2002-08-05 12:09:00)Не подскажете, как отсортировать строки в ComboBox, если они представляют из себя численные значения, допустим у меня в ComboBox грузятся из базы некоторые численные значения, и получается так:
1024
128
16
160
192
24
256
32
4
48
512
64
8
96
а надо, чтобы была численная сортировка, а не строковая. Спасибо.
Василич (2002-08-06 16:48:00) [1]Да, я уже въехал. Все дело в том, что ComboBox.Sorted was True...., а сортировать данные в ComboBox"е не надо было...
lenin (2002-08-06 16:15:00) [2]Sorted сортирует по алфавиту.
Song (2002-08-06 16:10:00) [3]Не надо никакого CustomSort(). У TStringList есть свойство Sorted. А у TComboBox.Items тип TStrings, прямая абстрактная зависимость... Зачем Вам пузырёк...? Тут и стакана хватит :-)
Василич (2002-08-06 13:44:00) [4]>>IlyaA
Оно самое. Просто и конструктивно. Спасибо.
IlyaA (2002-08-06 12:13:00) [5]Самый простой метод "Пузырька": (Вот тебе код)
Пусть данные в ListBox /надеюсь сам поймёшь как переделать/
For i:=0 to ListBox.Items.Count-1 do
For j:=ListBox.Items.Count-1 downto i do
If StrToInt(ListBox.Items[j]) < StrToInt(ListBox.Items[j-1]) then
begin
Tmp:=ListBox.Items[j];
ListBox.Items[j]:=ListBox.Items[j-1];
ListBox.Items[j-1]:=Tmp;
end;
Удачи.
kull (2002-08-06 11:16:00) [6]2 Василич
Ну я не знаю. Я работаю с Interbase - у меня все с Order by в порядке. Если ORDER BY не сортирует, зачем он нужен?
Ученик (2002-08-06 09:29:00) [7]>Василич (05.08.02 22:05)
Все оказалось сложнее чем предполагалось, указанное сообщение посылается только, если ComboBox имеет стили CBS_OWNERDRAWFIXED и не имеет стилей CBS_HASSTRINGS, что влечет за собой дополнительные проблемы, поэтому в данном случае решение вряд ли подходит, сорри.
Василич (2002-08-06 09:14:00) [8]RAM smallint
MSSQL
kull (2002-08-06 01:41:00) [9]
> Они не приходят отсортированными.
А RAM - это целочисленное поле или строка (может вообще вариантного типа)?
Если целочисленное, то что за БД у тебя?
Не приводит ли преобразование: RAM AS [Оперативная память] к нецелому типу?
Order by должен работать на ура, что то у тебя с запросом не то...
Василич (2002-08-05 22:05:00) [10]>>kull
SELECT TOP 100 PERCENT RAM AS [Оперативная память]
FROM dbo.RAMs
ORDER BY RAM
Они не приходят отсортированными.
>>IlyaA
Каким образом ?
>> Ученик
Не подскажешь, как и когда обрабатывать это сообщение, и когда оно вообще возникает ?
kull (2002-08-05 18:49:00) [11]А это не подойдет?
Select {field name} from {table name} order by {field name}
Данные приходят уже отсортированными...
IlyaA (2002-08-05 15:07:00) [12]Напиши собственный сортировщик
Skier (2002-08-05 14:34:00) [13]>Василич
А также : код быстрой сортировки (Хоора) можно подсмотреть
в Дельфийском примера по thread-ам...
Opuhshii (2002-08-05 14:14:00) [14]2Василич (05.08.02 12:13)
неужели даже метод пузырьковой сортировки вам неизвестен...
c0pYc@t (2002-08-05 12:51:00) [15]а что strtoint не помогает?
Skier (2002-08-05 12:21:00) [16]>Василич
Можно так :
- перекачать все строки из ComboBox-а в TStringList.
- написать у него [TStringList-а] код метода CustomSort
- отсортировать строчки в TStringList-е
- засунуть строчки из TStringList-а обратно в ComboBox
Ученик (2002-08-05 12:18:00) [17]WM_COMPAREITEM
lenin (2002-08-05 12:16:00) [18]А какая разница из базы или нет.
lenin (2002-08-05 12:13:00) [19]В ручную сортировать.
Василич (2002-08-05 12:13:00) [20]Как же вручную, если значения из базы данных вытаскиваются ?