Форум: "Начинающим";
Текущий архив: 2018.02.25;
Скачать: [xml.tar.bz2];
ВнизКак быстро заполнить TreeView по данным ClientDataset Найти похожие ветки
← →
gedevan (2016-02-27 06:59) [0]В 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) [1]ClientDataSet1 локальный, ни к чему не подключенный.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.02.25;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.001 c