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

Вниз

Как лучше хранить и редактировать дерево находящееся в массиве?   Найти похожие ветки 

 
CodeGen   (2007-08-19 01:48) [0]

Как это лучше организовать?

Массив записей, каждая из которых содержит ссылку на предка, или на корень дерева. Это всё надо отображать и редактировать с помощью TTreeView. Кто-нибудь решал подобные задачи? Может поделиться опытом, как лучше такое делать?


 
Kerk ©   (2007-08-19 02:15) [1]

А в чем конкретно проблема?


 
CodeGen   (2007-08-19 02:19) [2]

Как при перетаскивании мышью перестроить массив, например.


 
MsGuns ©   (2007-08-19 02:20) [3]

Что хранится в "дереве" ?


 
MsGuns ©   (2007-08-19 02:22) [4]

>CodeGen   (19.08.07 02:19) [2]
>Как при перетаскивании мышью перестроить массив, например.

Причем здесь мышка до массива.


 
CodeGen   (2007-08-19 02:23) [5]


> MsGuns ©   (19.08.07 02:20) [3]
>
> Что хранится в "дереве" ?


Записи.


> MsGuns ©   (19.08.07 02:22) [4]
>
> >CodeGen   (19.08.07 02:19) [2]
> >Как при перетаскивании мышью перестроить массив, например.
>
>
> Причем здесь мышка до массива.


Потому, что в TTreeView элементы можно перетаскивать мышью.


 
Юрий Зотов ©   (2007-08-19 11:34) [6]

> CodeGen   (19.08.07 01:48)  
> Как это лучше организовать?

1. Если каждая запись содержит ссылку на предка, или на корень дерева, то никакой массив уже не нужен, достаточно просто хранить ссылку на корень.

2. С отображением и редактированием тоже просто - каждая запись содержит ссылку на TTreeNode (а не на запись), а эта TTreeNode в своем свойстве Data хранит ссылку на запись. Получаем однозначную взаимную связь между узлом визуального дерева и записью, а вся остальная визуалка уже практически готова в TTreeView.


 
Petr V. Abramov ©   (2007-08-19 16:37) [7]

> Юрий Зотов ©   (19.08.07 11:34) [6]
при таком подходе и сам массив записей как бы уже ни к чему, все сидит в Data TreeNode`ов, да и ни к чему. Единственно, для чего может понадобиться - для какой-то быстрой обработки. Но тогда в массиве и ссылка на TreeNode ни к чему, достаточно из Data ссылки на элемент массива, для его перетасовки в случае мышиной возни в TreeView.


 
Kerk ©   (2007-08-19 16:38) [8]

> [6] Юрий Зотов ©   (19.08.07 11:34)

ИМХО не стоит так сильно завязывать хранимые данные с способом их отображения


 
Юрий Зотов ©   (2007-08-19 17:08) [9]

> Petr V. Abramov ©   (19.08.07 16:37) [7]

О чем и речь.

> Kerk ©   (19.08.07 16:38) [8]

Две завязки НЕИЗБЕЖНЫ в ЛЮБОМ варианте:
1. Визуальный элемент должен как-то ссылаться на элемент данных.
2. Визуальный элемент должен знать, как из ссылки на элемент данных получить отбражаемую строку.

И если вдуматься, то в [6] именно это и предлагается.


 
CodeGen   (2007-08-20 02:16) [10]


> Юрий Зотов ©   (19.08.07 11:34) [6]


> 1. Если каждая запись содержит ссылку на предка, или на
> корень дерева, то никакой массив уже не нужен,


Что значит ненужен? Данные находятся в массиве.


 
ferr ©   (2007-08-20 02:19) [11]

> Что значит ненужен? Данные находятся в массиве.

Выкинуть массив.


 
Черный Шаман   (2007-08-20 03:26) [12]


> CodeGen   (20.08.07 02:16) [10]


Присвой каждому элементу уникальный в сессии ID и ищи наследуй по нему.


 
Юрий Зотов ©   (2007-08-20 07:49) [13]

> CodeGen   (20.08.07 02:16) [10]

Данные находятся в ЭЛЕМЕНТАХ. А как элементы связаны между собой (в виде массива, дека, дерева или еще как) - это уже второй вопрос, но ясно, что два вида связи не нужны, одного достаточно.

Если каждый элемент имеет ссылку на родителя, получаем дерево. Зачем еще какие-то массивы?


 
Algol   (2007-08-20 12:56) [14]


> Две завязки НЕИЗБЕЖНЫ в ЛЮБОМ варианте:
> 1. Визуальный элемент должен как-то ссылаться на элемент
> данных.
> 2. Визуальный элемент должен знать, как из ссылки на элемент
> данных получить отбражаемую строку.

Совсем не факт. В MVP визуальный компонент может даже не знать о модели. Дело визуального компонента - "отобразть то что скажут"


 
имя   (2007-08-20 22:32) [15]

Удалено модератором


 
CodeGen   (2007-08-21 06:00) [16]


> Юрий Зотов ©   (20.08.07 07:49) [13]
>
> > CodeGen   (20.08.07 02:16) [10]
>
> Данные находятся в ЭЛЕМЕНТАХ. А как элементы связаны между
> собой (в виде массива, дека, дерева или еще как) - это уже
> второй вопрос,


Нет они находятся в массиве. Это менять нельзя.


> Если каждый элемент имеет ссылку на родителя, получаем дерево.
>  Зачем еще какие-то массивы?


А если бы элементы массива не имели ссылок на родителей, то как бы мы узнали какой к какому прикреплён?


 
MsGuns ©   (2007-08-21 08:10) [17]

Есть в общем случае два способа отображения древовидных данных (не обязательно взятых из БД):
- полная загрузка ВСЕХ данных в дерево (по схеме, приведенной ЮЗ, или близкой к ней) для отображения  -  в этом случае данные с диска (таблицы) должны быть полностью отображены в ОП (в виде объектов типа record или специально разработанного класса), при этом каждая такая запись однозначно связана со "своим" узлом дерева.
- узлы дерева содержат только ключи (наименования) записей данных, представляющих группу записей, содержимое же групп отображается в таблице, "привязанной" к текущей группе (узлу дерева) - в этом случае дерево может быть никак не связано с собственно "массивом" записей данных, вместо этого ТЕКУЩИЙ УЗЕЛ связан с отображающим датасетом ЗАПРОСОМ.



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

Форум: "Прочее";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.042 c
8-1164920705
DevilDevil
2006-12-01 00:05
2007.09.16
IBasicAudio, put_Volume - реальная граница?


15-1187613383
pasha_golub
2007-08-20 16:36
2007.09.16
SYN flood: как побороть?


2-1187710522
Sonic90
2007-08-21 19:35
2007.09.16
Целое число


2-1187604435
vitv
2007-08-20 14:07
2007.09.16
Ошибка при открытии файла


3-1179292836
Цукор5
2007-05-16 09:20
2007.09.16
DBF потоках + "упаковка"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский