Вниз
Скачать: CL | DM;

Проблема с сортировкой ListView   Найти похожие ветки 

 
sergundi   (2004-04-15 13:04) [0]

Есть несколько столбцов в ListView. Добавляю в него ListItem, затем включаю сортировку по второму столбцу (дата) SortType = stBoth. После этого при добавлении следующего ListItem возникает Exception: List index out of bounds(1) в момент присвоения значения ListItem.Caption (при этом возникает onCompare и в вызове ListViewCompare параметр Item2.Subitems[1] еще не создан). Присвоить SortType = stNone не получается: компилятор выдает Incompatible types TSortType и TSubFieldType. Как быть?


 
Reindeer Moss Eater ©   (2004-04-15 13:12) [1]

После этого при добавлении следующего ListItem

Сразу после создания нового ListItem в нем еще нет Subitems, а OnCompare уже вызывается. А в нем идет обращение к несуществующим subitem"ам.
Делай выводы ...


 
sergundi   (2004-04-15 13:17) [2]

Reindeer Moss Eater:

Я это понимаю, но:
1. А как же при добавлении самого первого ListItema?
2. Почему ругается компилятор (см. начало)
3. Как вообще тогда использовать возможность сортировки?

Подскажите, если знаете, я не въеду никак.


 
Reindeer Moss Eater ©   (2004-04-15 13:29) [3]

1.Фик ли тут въезжать?

У тебя есть обработчик OnCompare?
В нем есть обращение к элементам SubItems по индексу?
Ты можешь проверить, что запрашиваемый индекс меньше чем Item1.SubItems.Count ?

Или надо институт закончить что бы это понять?

2. Про ругательство компилятора.
ListView1.SortType:=ComCtrls.stNone;


 
sergundi   (2004-04-15 13:39) [4]

Ты можешь проверить, что запрашиваемый индекс меньше чем Item1.SubItems.Count

Если я это делаю, сортировка происходит некорректно: первый элемент выпадает из сортированного списка. Он будет помещен на нужное место только при следующем добавлении ListItem. Если у тебя есть пример использования сортировки с событием onCompare, кинь плз мне на мыло или сюда.


 
Reindeer Moss Eater ©   (2004-04-15 13:42) [5]

А как она может произойти корректно, если то, по чему идет сравнение еще в природе не существует?


 
Reindeer Moss Eater ©   (2004-04-15 13:44) [6]

Если я это делаю, сортировка происходит некорректно: первый элемент выпадает из сортированного списка. Он будет помещен на нужное место только при следующем добавлении ListItem.

И что? Виндовый проводник, например, ведет себя точно так же.
Только он не ждет создания еще одного файла/каталога что бы отсортировать созданный файл/каталог. Он делает пересортировку по "обновить"


 
sergundi   (2004-04-15 13:52) [7]

Понятно, пасиба


 
Тимохов ©   (2004-04-15 13:56) [8]

я делал так - добавляешь, при этом в oncompare обходишь невозможную сортировку по не созданным подъэлементам, потом принудительно все сортируешь.


 
sergundi   (2004-04-15 14:11) [9]

Тимохов:

Я сделал по другому: перед добавлением новых элементов делаю ListView.SortType := ComCtrls.stNone, а после добавления снова ListView.SortType := ComCtrls.stBoth. Вроде работает. Непонятно только зачем для stNone (только для этого значения!) имя модуля указывать (на соседней машине работает ListView.SortType := stNone)


 
Reindeer Moss Eater ©   (2004-04-15 14:13) [10]

Влияет порядок модулей в твоем uses.
У меня никакого имени модуля добавлять не надо.


 
sergundi   (2004-04-15 14:20) [11]

да... Это называется "изучайте матчасть". Всё, на сеновал - и учиться, учиться и еще раз учиться :-)


 
Тимохов ©   (2004-04-15 14:44) [12]


>  Всё, на сеновал - и учиться, учиться и еще раз учиться
> :-)

чему ?


 
sergundi   (2004-04-15 14:50) [13]

например, почитать как влияет порядок модулей в uses на работу компилятора со свойствами типов этих модулей



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
3-1080823713
badis
2004-04-01 16:48
2004.05.02
Будет ли работать БД?


7-1078480227
Вадим
2004-03-05 12:50
2004.05.02
"Мой компьютер"


14-1081405937
Игорь Шевченко
2004-04-08 10:32
2004.05.02
Хочу сказать спасибо создателям сайта и тем, кто над ним трудится


9-1069480497
Агент Смит [8]
2003-11-22 08:54
2004.05.02
Текстура из нескольких бмп. OpenGL


3-1081333332
Ascana_
2004-04-07 14:22
2004.05.02
Как выбранную запись сделать первой?




   Наверх