Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2017, 15:15   #1
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
Печаль TreeView и DBgrid

Не получается сделать следующее: Построение дерева идет в TreeView из базы данных, нужно чтобы при щелчке на ветку, открывались связанные данные в DBgrid (отображались). Эти данные связанны по id, тобишь по идее надо как то назначить TreeView - параметр Node -> id из базы, и при щелчке чтобы в DBgrid было отображение...

Тобишь нужно создать построение дерева с назначением этих параметров...

Последний раз редактировалось Dryid466; 26.10.2017 в 15:19.
Dryid466 вне форума Ответить с цитированием
Старый 26.10.2017, 15:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Засунь в свойство Data этот id, как Pointer(Id). Считывай как Integer(Data)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.10.2017, 17:07   #3
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

А как точнее в виде кода?
Dryid466 вне форума Ответить с цитированием
Старый 26.10.2017, 17:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Dryid466 Посмотреть сообщение
Построение дерева идет в TreeView из базы данных
покажите в виде кода.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.10.2017, 17:19   #5
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

У меня на данный момент вот таким образом строится дерево
Код:
  
  if tRazdels.IsEmpty then Exit;

  TreeView1.Items.Clear;

  Q1.SQL.Clear;
  Q1.SQL.Add('select * from Razdels where R_Parent=0');
  Q1.Open;
  if Q1.IsEmpty then Exit; 
  while not Q1.Eof do begin
    TreeView1.Selected := nil;
    TreeView1.Items.Add(TreeView1.Selected,
Q1.FieldByName('R_Name').AsString);
    Q1.Next;
  end; //while

  Q1.SQL.Clear;
  Q1.SQL.Append('select r.R_Name, d.R_Name '+
                    'from Razdels r, Razdels d '+
                    'where r.R_Num=d.R_Parent');
  Q1.Open;
  if Q1.IsEmpty then Exit; 
  Q1.First;
  while not Q1.Eof do begin TreeViewAddChild(Q1.Fields[0].AsString, Q1.Fields[1].AsString);
    Q1.Next;
  end; //while

 
  TreeView1.FullExpand;

Последний раз редактировалось Dryid466; 26.10.2017 в 17:34.
Dryid466 вне форума Ответить с цитированием
Старый 26.10.2017, 17:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Dryid466 Посмотреть сообщение
TreeViewAddChild:
Q1.SQL.Clear;
вот в этой строчке реально двоеточие после TreeViewAddChild ?!!

попробуйте ознакомиться с TTreeNode.Data Property

Последний раз редактировалось Serge_Bliznykov; 26.10.2017 в 17:36.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.10.2017, 17:35   #7
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

нет нет, это комментарий был, этой строчки в коде нет, убрал в коде выше
Dryid466 вне форума Ответить с цитированием
Старый 26.10.2017, 17:38   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я добавил ссылочку. там есть пример.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.10.2017, 18:11   #9
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

жалко только что тут все по отдельности в примере))
Dryid466 вне форума Ответить с цитированием
Старый 30.10.2017, 11:05   #10
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

Код:
 
  if tRazdels.IsEmpty then Exit;
 
  TreeView1.Items.Clear;
 
  Q1.SQL.Clear;
  Q1.SQL.Add('select * from Razdels where R_Parent=0');
  Q1.Open;
  if Q1.IsEmpty then Exit;  
 
  while not Q1.Eof do begin
    TreeView1.Selected := nil;
    //TreeView1.Items.Add(TreeView1.Selected,Q1.FieldByName('R_Name').AsString);
    TreeView1.Items.AddChildObject(nil,Q1.FieldByName('R_Name').AsString,Pointer(Q1.FieldByName('R_Num').AsInteger));
    Q1.Next;
  end; //while

 
  Q1.SQL.Clear;
  Q1.SQL.Append('select r.R_Name, d.R_Name '+'from Razdels r, Razdels d '+ 'where r.R_Num=d.R_Parent');
  Q1.Open;
  if Q1.IsEmpty then Exit;  
  Q1.First;
  while not Q1.Eof do begin

  TreeViewAddChild(Q1.Fields[0].AsString, Q1.Fields[1].AsString);
 
    Q1.Next;
  end; //while

 
  TreeView1.FullExpand;
Назначение TreeNode выполняется успешно, но только для главного узла, а что на счет дочерних, не выходит, в чем косяк?
Dryid466 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DbGrid + TreeView + CheckBox tarakan1983 БД в Delphi 13 03.12.2015 22:45
Отображение данных в DBGrid через TreeView nagi12-02 C++ Builder 0 17.01.2014 11:20
treeview с dbgrid Romium БД в Delphi 5 13.04.2013 08:10
DbGrid и Treeview c DbRichEdit ch1pah1 БД в Delphi 1 13.01.2012 05:47
Выборка в DBGrid по выбору узла в TreeView WhiteDemon БД в Delphi 13 17.02.2011 19:29