Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение данных в виде дерева 
:(
    Опции темы
Kbl4AH
Дата 29.7.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Здравствуйте, уважаемые!

В очередной раз столкнулся с проблемой и не знаю каким образом ее решить.
В таблице есть 2 поля: Поле1 - отдел, Поле2 - подотдел, т. е. если в записи Поле1 заполнено, а Поле2 - null, то это отдел, а если оба поля заполнены (причем значения в Поле1 одинаковые), то это подотдел.

Мне нужно, чтобы выбранные данные отображались в виде дерева (как в проводнике), т.е. выбрал отдел, нажал "+"  - открылся список подотделов этого отдела, соответственно, нажал "-" - список закрылся.

Подскажите, пожалуйста, каким образом это можно реализовать?
Я так понимаю с помощью компонента TtreeView? А каким образом привязать это к выборке? Выборку делаю при помощи OracleQuery или OracleDataSet.

Заранее благодарен всем откликнувшимся!
PM MAIL ICQ   Вверх
Poseidon
Дата 29.7.2008, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Kbl4AH @  29.7.2008,  08:51 Найти цитируемый пост)
Я так понимаю с помощью компонента TtreeView? А каким образом привязать это к выборке?
В простейшем случае можно и TTreeView. Если нужно что-то более "интересное", лучше TVirtualView.

А с привязкой вообще не пойму какие проблемы. Получаешь выборку. Формируешь первый уровень веток по "Поле1". Далее смотришь, если есть "Поле2", то формируешь второй уровень
В TTreeView первый уровень создается так:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Items.Add(nil, 'Первый уровень');
end;

второй так:
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
TreeView1.Items.AddChild(TreeView1.Items.Item[2],'Второй уровень третьей ветки'); 
// в Item счет идет с нуля, поэтому там 2, но ветка заполнится третья.
// Думаю понятно, что для выполнения этого кода третья ветка должна существовать, 
// иначе будет ошибка
end;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Kbl4AH
Дата 29.7.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



А как перейти на следующую ветку первого уровня, а то он у меня весь список второго уровня пихает в первую ветку по ниспадающей(((

Это сообщение отредактировал(а) Kbl4AH - 29.7.2008, 11:01
PM MAIL ICQ   Вверх
Poseidon
Дата 29.7.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



С конца smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Kbl4AH
Дата 30.7.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



А как получить значение выделенного элемента дерева?
PM MAIL ICQ   Вверх
Poseidon
Дата 30.7.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Ну так это... так smile

Код

TreeView1.Selected.Text



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Kbl4AH
Дата 30.7.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Спасибо!
PM MAIL ICQ   Вверх
holodnaya
Дата 30.7.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



У меня возник следующий вопрос:
я выбираю элемент дерева, а потом фокус переходит на другой компонент и выделение выбранного элемента дерева снимается, а мне нужно чтобы оно оставалось. Подскажите, пожалуйста, как мне это сделать.
Подсказываем, не стесняемся;)
PM MAIL   Вверх
Poseidon
Дата 30.7.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(holodnaya @  30.7.2008,  14:07 Найти цитируемый пост)
Подсказываем, не стесняемся;)
Яй, я бы с радостью, да только вот как-то стеснительно  smile 

Код
TreeView1.HideSelection:= False;


PS. Судя по последним двум вопросам, кому-то нужно почитать хоть основы про этот компонент.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
holodnaya
Дата 30.7.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



Чмоки тя в щечку, Poseidon'чик smile

Это сообщение отредактировал(а) holodnaya - 30.7.2008, 14:39
PM MAIL   Вверх
holodnaya
Дата 30.7.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



И ещё один вопрос назрел.
Существует три уровня записей в дереве. Можно ли узнать к какому уровню принадлежит выбранная запись.
Подскажите, пожалуйста, как это сделать.
PM MAIL   Вверх
Rennigth
Дата 30.7.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



holodnaya, 
Код

TreeView.Selected.Level


 smile 

Цитата(holodnaya @  30.7.2008,  14:27 Найти цитируемый пост)
Чмоки тя в щечку, Poseidon'чик 

ахтунг!!!  smile

Добавлено через 3 минуты и 5 секунд
 smile 
Цитата(Rennigth @  30.7.2008,  15:23 Найти цитируемый пост)
ахтунг!!!    

а не, не ахтунг, ник не прочел нормально smile
он + она =  smile, все ясно smile


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Poseidon
Дата 30.7.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Rennigth @  30.7.2008,  15:23 Найти цитируемый пост)
он + она = smile , все ясно
 Rennigth, свалацуга  smile 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Rennigth
Дата 30.7.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Poseidon @  30.7.2008,  15:32 Найти цитируемый пост)
Rennigth, свалацуга    

 smile 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
holodnaya
Дата 30.7.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



Rennigth, теяб тоже чмоки в щечку  smile  )))
Спасибо
PM MAIL   Вверх
holodnaya
Дата 31.7.2008, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



Зравствуйте, уважаемые!

Сегодня возникла ещё одна проблема с деревяьми. Существует 2 дерева: одно с названиями подразделений и отделов, другое с соответсвующими им кодами. Дерево с кодами пользователь не видит, но при выборе подразделения или отдела в первом дереве необходимо считать его код из второго дерева. То есть, позиция во втором дереве должна равняться выбранной в первом дереве позиции. 
Скажите, пожалуйста, как это сделать.
Или, может быть, существуют иной способ считать код подразделения и отдела, используя толко одно дерево?
PM MAIL   Вверх
Alkash
Дата 31.7.2008, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



М...В подузел писать ещё и коды необходимые, просто не отображать - а читать, когда будет необходимо...


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Kbl4AH
Дата 31.7.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Цитата(Alkash @ 31.7.2008,  09:22)
М...В подузел писать ещё и коды необходимые, просто не отображать - а читать, когда будет необходимо...

Как это - писать, но не отображать? Часть строки видима, а часть - нет?

Как можно получить значение из дерева по абсолютному индексу?

Это сообщение отредактировал(а) Kbl4AH - 31.7.2008, 09:33
PM MAIL ICQ   Вверх
Alkash
Дата 31.7.2008, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Ну так - дерево - ты в узел  отдел, в подузлы отдела остальную инфу. VirtualTree юзай, а из него передавай нужные тебе данные TreeView


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Kbl4AH
Дата 31.7.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Не, мне нужно значение по абсолютному индексу получить...
P.S. А виртуалтри в каком наборе компонентов находится?

Это сообщение отредактировал(а) Kbl4AH - 31.7.2008, 09:54
PM MAIL ICQ   Вверх
Alkash
Дата 31.7.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Свойство TTreeNode: property Absolutelndex: Integer; Возвращает абсолютный индекс узла (с учетом всех подузлов)


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Kbl4AH
Дата 31.7.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Абсолютный индекс я сам догадался как получить=)
Как мне теперь по не му значение получить?
PM MAIL ICQ   Вверх
Alkash
Дата 31.7.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет





--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Kbl4AH
Дата 31.7.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Alkash, ты чего раньше молчал? 
С меня "Тройной", пасиб!
PM MAIL ICQ   Вверх
Alkash
Дата 31.7.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Да не за что)


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
pseud
Дата 31.7.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Цитата(holodnaya @  31.7.2008,  09:10 Найти цитируемый пост)
Сегодня возникла ещё одна проблема с деревяьми. Существует 2 дерева: одно с названиями подразделений и отделов, другое с соответсвующими им кодами. Дерево с кодами пользователь не видит, но при выборе подразделения или отдела в первом дереве необходимо считать его код из второго дерева. То есть, позиция во втором дереве должна равняться выбранной в первом дереве позиции. Скажите, пожалуйста, как это сделать.Или, может быть, существуют иной способ считать код подразделения и отдела, используя толко одно дерево?

у TreeNode есть чудесное свойство (наверняка тобой неиспользуемое) StateIndex (видно в том числе и в конструкторе).
в нем и храни идентификаторы.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Poseidon
Дата 31.7.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Alkash @  31.7.2008,  09:48 Найти цитируемый пост)
Ну так - дерево - ты в узел  отдел, в подузлы отдела остальную инфу. VirtualTree юзай, а из него передавай нужные тебе данные TreeView
Прикольный совет. Если уже и использовать VirtualTreeView, то все в нем и делать. Хранить нужную инфу так проще простого.

Цитата(Kbl4AH @  31.7.2008,  09:52 Найти цитируемый пост)
P.S. А виртуалтри в каком наборе компонентов находится?
Это не стандартный компонент. Но очень нужный если собираешься писать приложения со сложными деревьями (и не только с деревьями).



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
holodnaya
Дата 31.7.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



Цитата

у TreeNode есть чудесное свойство (наверняка тобой неиспользуемое) StateIndex (видно в том числе и в конструкторе).
в нем и храни идентификаторы. 


не могли бы вы ещё объяснить, как  не вручную (не используя контсруктор) записать значение в StateIndex, например  в цикле, когда и создаются записи в дереве
PM MAIL   Вверх
pseud
Дата 31.7.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Цитата(holodnaya @  31.7.2008,  13:01 Найти цитируемый пост)
не могли бы вы ещё объяснить, как  не вручную (не используя контсруктор) записать значение в StateIndex, например  в цикле, когда и создаются записи в дереве

приведи свой код создания узлов дерева
и я его дополню

Добавлено через 6 минут и 21 секунду
например так
Код

var
  node: TTreeNode;
  ...
begin
  ...
  node := TreeView1.Items.Add(nil, YourDataSet.FieldByName('Название').AsString);
  node.StateIndex := YourDataSet.FieldByName('ID').AsInteger;
  ...



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Kbl4AH
Дата 31.7.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



А как, например, получить значение 2 веточки, 3 подветочки?
PM MAIL ICQ   Вверх
holodnaya
Дата 31.7.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



pseud, спасибо большое, очень помог )
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2051 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.