Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: 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 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
3-1081336377
sergg
2004-04-07 15:12
2004.05.02
Как уменьшить ширину столбцов в DBGride?


3-1081325944
CASPER
2004-04-07 12:19
2004.05.02
Как скопировать данные из одной базы Access в другую.


1-1081937636
antoniz
2004-04-14 14:13
2004.05.02
Как сделать полупрозрачный фон (заливку)


1-1081853193
Soldat
2004-04-13 14:46
2004.05.02
Сокрытие события


3-1081416502
wild_arg
2004-04-08 13:28
2004.05.02
Выбор максимума внутри групп