Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

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

 
dream   (2004-12-03 10:18) [0]

В общем имееться treeview с несколькими тесячами записей ... но подгрупп в нём всего 1 категория т.е

--- группа 1
---- подгруппа 1
---- подгруппа 2
---- подгруппа 3
--- Группа 2
---- подгруппа 1
---- подгруппа 2
---- подгруппа 3  

В чём проблема : нужно чтобы при нажатии на группу из базы брались подгруппы и вставлялись на свой место а при закрытии группы опять удалялись ( т.е оставались видимыми только названия групп )

При удалении делаю так :

if treeview1.Selected.Level <> 0 then exit;

for n:=1 to treeview1.Selected.Count do begin
if treeview1.Selected.Count > 0 then
TreeView1.Items[1].Delete;
end;

а при добавлении код :

if treeview1.Selected.Level <> 0 then exit;

nodemain:= TreeView1.Selected;

for n:=1 to treeview1.Selected.Count do begin
if treeview1.Selected.Count > 0 then
TreeView1.Items[1].Delete;
end;

if ADO_group.Locate("Description",TreeView1.Selected.Text ,[locaseinsensitive])  = true then begin

for i := 1 to ADO_subGroup.RecordCount do begin
ADO_subGroup.RecNo:=i;
if ADO_subGroup.fieldbyname("IDGroup").AsString = ADO_group.fieldbyname("IDGroup").AsString then
nodenew:=TreeView1.Items.AddChild (nodemain,ADO_subGroup.fieldbyname("Description").AsString);
end;
end;

Работает через раз , иногда удаляет сами группы а не подгруппы ... ужа запарился что не так в коде ? Подскажите пожалуйста


 
ЮЮ ©   (2004-12-03 10:31) [1]

>При удалении делаю так, а при добавлении код :

Лучше скажи в обработчиках каких событий этот код?


 
dream   (2004-12-03 10:39) [2]

Добавление : TreeView1DblClick

Удаление : Collapsing


 
ЮЮ ©   (2004-12-03 10:54) [3]

for n:=1 to treeview1.Selected.Count do begin
if treeview1.Selected.Count > 0 then
TreeView1.Items[1].Delete;
end;

Во-первых, индекс в Items изменяется от 0 до Items.Count - 1.
Во-вторых, после TreeView1.Items[1].Delete будет удален 2 элемент списка ВСЕГО ДЕРЕВА со всеми своими детьми. Зачем всё это ещё и в цикле делать, тем более, зависящего от Selected?

for n := treeview1.Selected.Count - 1 downto 0 do
  treeview1.Selected.Item[n].Delete


 
dream   (2004-12-03 10:59) [4]

Спасибо ! Получилось ... я просто ещё толком не знаком с этим компонентом по этому и запутался.


 
ЮЮ ©   (2004-12-03 11:01) [5]

Если ADO_group и ADO_subGroup и связаны как Master-Detail, то проверка

if ADO_subGroup.fieldbyname("IDGroup").AsString = ADO_group.fieldbyname("IDGroup").AsString then

просто лишняя, если, нет, то нет возврата к началу НД
Цикл организован неправильно, надо
 ADO_subGroup.First;
 while not ADO_subGroup.EOF do begin
 ...
   ADO_subGroup.Next;
 end;


 
dream   (2004-12-03 11:34) [6]

Так работает без проблем , а при  ADO_subGroup.Next; скорость навигации по базе ухудшаеться в несколько раз.

Возврат в начало списка это как раз
for i := 1 to ADO_subGroup.RecordCount do begin


 
ЮЮ ©   (2004-12-03 11:49) [7]

Тогда уж, возврат в начало списка, точнее, позиционирование в списке, это как раз ADO_subGroup.RecNo:=i;, которое я сразу не приметил.


 
dream   (2004-12-03 12:13) [8]

Ну да я просто не так выразился , написал перебор а установку позиции как раз и не написал.

Слушай ты не знаешь случайно как отследить нажатие на крестик ( развернуть ) а то при двойном щелчке работает а при нажатии на развернуть не работет


 
ЮЮ ©   (2004-12-03 12:25) [9]

>а то при двойном щелчке работает а при нажатии на развернуть не работет

А как он может работать, если после сворачивания ты всех детей удалил? Оставляй хотя бы одного :) Или вообще не трогай: у тебя же в коде на открытие всё равно стоит сначала удаление


 
dream   (2004-12-03 13:19) [10]

Как раз и нужно удалять... чтобы не тормозить процесс.. там могут содержаться несколькко тыс записей.

а отследить нажатие некак нельзя ?


 
ЮЮ ©   (2004-12-06 05:46) [11]

Как, скажи, можно распахнуть узел, если у него нет детей? Вот я и предлагаю при создании "группы" вставлять Dummy "подгруппу", которая все-равно при распахивании будет уничтожена. Аналогично, после удаления всех "подгрупп" при сворачивании "группы" добавить туда же  Dummy "подгруппу".



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
1-1101985367
PURGEN
2004-12-02 14:02
2004.12.19
Форма


14-1100769903
Koala
2004-11-18 12:25
2004.12.19
Майкрософт использует крякнутый софт?


14-1100470762
Homa_Programer
2004-11-15 01:19
2004.12.19
свой сайт


14-1101562175
ИМХО
2004-11-27 16:29
2004.12.19
Шевченко лидирует в опросе "Лучший футболист Европы"


4-1099323488
Alexey_Trofimov
2004-11-01 18:38
2004.12.19
Отключить мышь или чтоб его небыло видно