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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VirtualTreeView, работа с БД 
:(
    Опции темы
aaav
Дата 4.3.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день.

заполняю VTreeView из БД, структура не дерево, реализация - как описано в статье.
Т.к. в таблице много полей, то в VTreeView - отображаю только несколько столбцов.
Подскажите как можно сделать что бы в каждой строке всегда отображался + и по его нажатию (Expanding) - разворачивался список с дочерними ветками (addChild) в которые занести данные других столбцов таблицы.

Спасибо!
PM MAIL   Вверх
Poseidon
Дата 4.3.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Так если у тебя addChild, то + автоматически появится.


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


Новичок



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

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



дочерних узлов первоначально нет, заполнил из БД и все (но прорисовал не все столбцы, их много), теперь хочу отобразить + и по его нажатию сделать добавление дочерних узлов, а в них добавить в данные из остальных столбцов
PM MAIL   Вверх
Poseidon
Дата 5.3.2009, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(aaav @  4.3.2009,  12:43 Найти цитируемый пост)
теперь хочу отобразить + и по его нажатию сделать добавление дочерних узлов
Если хочется сделать именно так, то добавь к каждому RootNode по одному ребенку (addChild) и получишь свои плюсики. Но лично я бы свормировал сразу все дерево и ничего потом уже не подгужал. VT позволяет загружать несколько тысяч веток практически мгновенно.



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


Шустрый
*


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

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



пробую так же отобразить на VT выборку из БД.
но я работаю с mysql напрямую потому у меня данные возвращаются в структурах Row: PMYSQL_ROW; количество я получаю через mysql_field_count и потом перебором пока not nil выбираю Row:=mysql_fetch_row
вот думаю как бы прикрутить VT по примеру из доки...



PM MAIL WWW ICQ   Вверх
aaav
Дата 11.3.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Делаю как в примере в статье:

Код

type
  MyNode = ^TMyNode;
  TMyNode = record
    ID : Integer;
    Name_1, Name_2, Name_3 : WideString;
    Initialized: Boolean;
  End;


procedure TMyForm.FormCreate(Sender: TObject);
begin
  VMyTree.NodeDataSize :=SizeOf(TMyNode);
end;


procedure TMyForm.LoadVMyTree;
begin
  With VMyTree Do
    begin
      Clear;
      NodeDataSize :=SizeOf(TMyNode);
      RootNodeCount :=MyQuery.RecordCount;
    end;
end;

procedure TMyForm.VMyTreeFreeNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode);
Var
  MyNode : PMyNode;
begin
  MyNode := Sender.GetNodeData(Node);
  If Assigned(MyNode) then
    Finalize(MyNode^);
end;

procedure TMyForm.VMyTreeGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
Var
  MyNode : PMyNode;
begin
  MyNode := Sender.GetNodeData(Node);
  Case Column Of
    0: CellText :=IntToStr(MyNode.ID);
    1: CellText :=MyNode.Name_1;
  end;
end;

procedure TMyForm.VMyTreeInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
Var
  MyNode: PMyNode;
begin
  MyNode := Sender.GetNodeData(Node);
  If Not MyNode.Initialized then
    begin
      Initialize(MyNode^);
      With MyNode^ Do
        begin
          ID := MyQuery.FieldByName('ID').AsInteger;
          Name_1 :=MyQuery.FieldByName('NAME_1').AsString;
          Name_2 :=MyQuery.FieldByName('NAME_2').AsString;
          Name_3 :=MyQuery.FieldByName('NAME_3').AsString;
          Initialized := True;
        end;
    end;
  If Not MyQuery.Eof Then
    MyQuery.Next;
end;


все великолепно работает, но я хочу что бы в дереве выводилось не только линейно ID, Name_1, но и у каждой такой строки были бы дочерние узлы содержащие каждый Name_2 и Name_3

как такое можно реализовать?
PM MAIL   Вверх
aaav
Дата 14.3.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Неужели никто не подскажет?
PM MAIL   Вверх
aaav
Дата 30.3.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может все же кто-то поможет?
PM MAIL   Вверх
pethead
Дата 1.4.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну так порождая эти ноды и заполняй их. а так ты сам все делаешь линейно - линейно и выходит.
PM MAIL WWW ICQ   Вверх
AndrewPA
Дата 12.4.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я думаю что в событии InitNode можно добавить к записи RootNode (или 0 level) свойство - имеет детей InitialStates:=InitialStates+[vchashchildren]
У тебя у каждой записи появится + по которому ты можешь нажать и вывзвать событие initchildren где укажешь сколько детей ты хочешь показать узла и после этого у тебя будет вызов GetText для детей.
Чтото типа того
PM MAIL   Вверх
dvamaster
Дата 15.4.2009, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Еще вариант, добавить Child с названием к примеру "идет запрос". При раскрытии выполняешь запрос и обновляешь детей, удаляя самый первый ("идет запрос").

Получишь еще и визуальную "симпатяшку"  smile 


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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