Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите отсортировать ListView не по caption


hero ©   (2008-01-10 07:18:00) 

мне нужно отсортировать список скажем по 3-ей колоке!! КАК?
ни как не могу разобраться с TLVCompare.

Подскажите ,кто сталкивался с этой проблем.


Сергей М.   (2008-01-10 13:37:00) [1]


> hero   (10.01.08 13:30) [8]


> после каждого добавления делать  :
>  ListView1.CustomSort(nil, 0); ?!?!?!?!
>
> при этом ListView1.SortType := stNone; ???
> <Цитата>
>
>  


Угу. Если объем списка сравнительно невелик. Иначе тормоза при  таком подходе неизбежны.


hero   (2008-01-10 13:30:00) [2]

дело не в переводе в числа .. там .. или обратно,
я проверяю фунцией lstrcmp(PChar(string1), PChar(string2));

Как запустить проверку после заполнения всех данных ???
после каждого добавления делать  :
 ListView1.CustomSort(nil, 0); ?!?!?!?!

при этом ListView1.SortType := stNone; ???


Сергей М.   (2008-01-10 12:45:00) [3]


> hero   (10.01.08 10:28) [2]


Либо запускай сортировку после заполнения списка либо проверяй строку на непустое значение, прежде чем конвертить ее в число.

Да и нафих нужна эта конверсия, если соответствующее строке число можно хранить в TListItem.Data ?


@!!ex   (2008-01-10 11:55:00) [4]

> [5] morgoth   (10.01.08 11:37)

упс. действительно. тогда проверку на пустое поле надо вставить.


morgoth   (2008-01-10 11:37:00) [5]

> [3]
ты не поверишь, но '98' будет больше '115' ))), вот затем и перевод


авыф   (2008-01-10 10:46:00) [6]

сортировать после заполнения всего списка


@!!ex   (2008-01-10 10:30:00) [7]

> [2] hero   (10.01.08 10:28)

А зачем в число переводить?
'98'>'15'
98>15
так нафиг перевод?


hero   (2008-01-10 10:28:00) [8]

дело в том что событе OnCompare сразу после item.add таким образом item.subitems = '' поэтому следующий код вызывает ошибку

procedure TForm1.ListView1Compare(Sender: TObject; Item1,
 Item2: TListItem; Data: Integer; var Compare: Integer);
var
 n1, n2: integer;
begin
 n1 := StrToInt(Item1.SubItems[2]);
 n2 := StrToInt(Item2.SubItems[2]);
 if n1 > n2 then
   Compare := -1
 else if n1 < n2 then
   Compare := 1
 else
   Compare := 0;
end;



есть ли другой выход?


{RASkov}   (2008-01-10 07:26:00) [9]

> [0] hero   (10.01.08 07:18)

http://www.yandex.ru/yandsearch?clid=9582&text=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0+TListView


Наверх

Титульная страница Поиск, карта сайта Написать письмо