Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
1-1102076409
Mouserx
2004-12-03 15:20
2004.12.19
Помогите состыковатся с DLL написаной на C


3-1100696705
Moiseev-KN
2004-11-17 16:05
2004.12.19
Не получается сохранить в базе значение типа Currency


3-1100752786
Vladik
2004-11-18 07:39
2004.12.19
Настройки соединения для ADO


1-1102187540
Bobby Digital
2004-12-04 22:12
2004.12.19
Компонент


3-1100677731
Algiz
2004-11-17 10:48
2004.12.19
как можно через Query редактировать и добавлять записи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский