Быстрая очистка дерева в TreeView...

Программирование на Visual Basic for Applications
Styg
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 12.02.2004 (Чт) 15:37

Быстрая очистка дерева в TreeView...

Сообщение Styg » 12.02.2004 (Чт) 16:12

Привет, братва лихая.

Паханы напрягли программулину слабать...

Вообщем, проблемы с TreeView...

1. Нужно очистить дерево.
Написал рекурсивную процедуру (три строчки). Дерево очищается, но долго, больше минуты. Комп нормальный (Celeron 1.7, 512мб памяти). Узлов в дереве >3500...
Подскажите как этого гада убивать, чтобы быстро и тихо...

2. Слева TreeView, справа ...
Нужно чтобы справа был список позиций, расположенных в группе выбранной слева. Т.е. обычный справочник товаров. Справа дерево товаров, слева сами товары....
Как организовать левую часть? Попробовал вставить подчиненую форму, запрос не могу составить....

WHERE
[AllArticlesGK].[ID_GROUP]=[Forms]![fmArtTree]![tvwArtGroups]![SelectedItem]![Key] не работает...
Вобщем проблема - как вставить ссылку на выбранный узел в запрос для подчиненной формы?
Да и воообще, в любой запрос. Конструктор выражений "не видит" TreeView вообще, что естественно....Так что от него помощи никакой...

Может кто-нибудь подсказать, как бороться с этими гадами?...

Кстати, товаров больше 65000, не уверен, что Аксцесс будет давать нормальную скорость... Но это так, к слову...

Andreika
Бывалый
Бывалый
 
Сообщения: 226
Зарегистрирован: 17.04.2002 (Ср) 9:57
Откуда: Russia

Сообщение Andreika » 13.02.2004 (Пт) 6:46

1.: Me.TreeView1.Nodes.Clear

2.: При выборе (клике) по узлу дерева переноси в какой либо элемент на форме (текстбокст например) значение ключа выбранного узла. А рекордсет формы привяжи к значению данного элемента.

Просто ты прав:
Конструктор выражений "не видит" TreeView вообще


Да и у меня встечный вопрос а каким образом и как долго у тебя заполняется дерево?

Styg
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 12.02.2004 (Чт) 15:37

Сообщение Styg » 13.02.2004 (Пт) 18:59

Дерево заполняется за секунду максимум.
Заполняется тупо, открываю отсортированный рекордсет, по всем строчкам цикл - AddNode (....)... или я не понял вопроса? :)

Nodes.Clear тоже медленно. Такое ощущение, что проблема в прорисовке. Можно на время очистки отключить у TreeView обновление (прорисовку)? А потом снова включить...
Не знаешь как?

А по поводу связи, я вот что придумал:
Бросаю на форму с деревом подчиненую форму.
На событие NodeClick у TreeView вешаю следующий код
(artView - это подчиненная форма):

Dim tmpStr As String
Dim tmpNode As Node
Set tmpNode = tvwArtGroups.SelectedItem
tmpStr = Left(tmpNode.Key, Len(tmpNode.Key) - 2)
Me.artView.Form.RecordSource = "SELECT Code, Nazv FROM AllArticlesGK " & _
" WHERE ID_GROUP = " & tmpStr & ";"

Удивляюсь, но это работает и скорость меня устраивает :)

sash
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.05.2003 (Сб) 3:37

Сообщение sash » 14.02.2004 (Сб) 20:05

Какая структура дерева?

1. Если это просто список категорий товаров типа:

---CD
---DVD
....
и т.д. то лучше замени TreeView на Listbox или ListView (если картинки товаров нужны).

2.Если дерево выглядит примерно так:
---CD
------Музыка
------Фильмы
---DVD
------Музыка
------Фильмы
то можно также заменить TreeView ComboBox'ом в сочетании с ListBox или ListView.

3.При болле сложном ветвлении, можно тока предложить заполнять дерево по мере обращения, т.е. заполняем сначала главные узлы, а подчинённые помере востребования, тогда количество узлов уменьшиться. Да и не забудь после того как с узлом поработали удалить дочернии узлы :)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 110

    TopList