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

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

Как быстро заполнить TreeView по данным ClientDataset


gedevan ©   (2016-02-27 06:59:00) 

В ClientDataSet таблица структуры Parent,Name,Index

ну и соответственно в эту таблицу забито дерево. В этом дереве присутствует корневой элемент, который имеет всегда одинаковое имя. И вот я заполнял TreeView  создавая в нем сначала этот корневой элемент, а потом делая фильтр по датасету по этому имени. И получал список ему подчиненных узлов и т.д.

ClientDataSet1.Filtered := false;
ClientDataSet1.filter := 'Parent = ''' + ParentNode + '''';
ClientDataSet1.Filtered := true;


И в итоге мы пришли к тому, что 500 элементов заполняются 8 секунд, что как бы меня не устроило. Также я выяснил, что самое медленное место это как раз вот этот код.

Тогда  я решил пойти другим путем, отсортировав по полю Index дата сет и просто прямым циклом делал по нему перебор. А в дереве искал среди добавленных уже узлов родителя очередного элемента и прицеплял к нему новый. Я надеялся, что родительские элементы добавляются в таблицу раньше чем подчиненные и поэтому если идти по порядку по полю Index, то не получится так, что прицеплять элемент не к чему, т.к. родитель в дерево еще не добавлен. Зря я на это надеялся. Особенно потому что в процессе работы, подчиненный элемент могут перепривязать к другому родителю. Хотя этим методом заполнение 500 записей заняло 1 секунду. Но несколько записей просто никуда не привязались...

Что же делать..

Единственное, что мне приходит в голову, это перенумеровать поле Index как то. А как его перенумеровать в голову мне не приходит.


gedevan   (2016-02-27 08:03:00) [1]

ClientDataSet1 локальный, ни к чему не подключенный.


Наверх

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