powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
10 сообщений из 10, страница 1 из 1
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32905809
Gumanitary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Private Sub TreeView4_DblClick()
TreeView4.Nodes.Clear
'Все переменные Publuc
'PaM - String
'RstM - ADODB.Recordset

  Set NdM = TreeView4.Nodes.Add(, , "R", "Root") 'Пробный корень
  Set rstM = CurrentProject.Connection.Execute("SELECT Units.*, Units.[Reports] FROM Units WHERE (((Units.[Reports]) Is Null))")
   While Not rstM.EOF
Set NdM = TreeView4.Nodes.Add(, , rstM!UnitNameU, rstM!Position & " " & rstM!Organization)
         rstM.MoveNext
    Wend
' Верхний уровень заполняется нормально


Set rstM = CurrentProject.Connection.Execute("SELECT Units.* FROM Units WHERE (((Units.Reports) Is Not Null))") ' меняем рекордсет

   While Not rstM.EOF
         PaM = rstM!Reports
         TreeView4.Nodes.Add PaM, tvwChild, rstM!UnitNameU, rstM!Position & " " & rstM!Organization  
'Не работает
Set NdM = TreeView4.Nodes.Add(rstM.Fields("Reports").Value, tvwChild, rstM!UnitNameU, rstM!Position & " " & rstM!Organization)
'Не работает
          rstM.MoveNext

'Stop
'При прсмотре в immidiate PaM выдает то же значение, что и раньше значение ключа при заполнении верхнего уровня.
'М.быть он не присваивает значения ключа при заполнении Корневых записей
'Нет, т.к. при присвоении 'пробному корню'
' явного значения в цикле появляется ошибка неуникальности ключа
    Wend

Set NdM = TreeView4.Nodes.Add(PaM, tvwChild, "C1", "Child 1") 'Эту НЕ рисует 
Set NdM = TreeView4.Nodes.Add("Здесь записан ключ от родительской явным образом", tvwChild, "C2", "Child 2") ' и эту НЕ рисует 
Set NdM = TreeView4.Nodes.Add("R", tvwChild, "C3", "Child 3") 'Рисует
Set NdM = TreeView4.Nodes.Add("R", tvwChild, "C4", "Child 4") 'Рисует
NdM.EnsureVisible
TreeView4.Style = tvwTreelinesText ' Style 4.

End Sub




Хелп, плз!
...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32906164
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структуру таблицы покажи.
...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32906185
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй ещё тип привести к строке
Cstr(Ключродителя)
...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32906240
Фотография Alviga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gumanitary
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set rstM = CurrentProject.Connection.Execute("SELECT Units.* FROM Units WHERE (((Units.Reports) Is Not Null))") ' меняем рекордсет

   While Not rstM.EOF
         PaM = rstM!Reports
         TreeView4.Nodes.Add PaM, tvwChild, rstM!UnitNameU, rstM!Position & " " & rstM!Organization  

'Не работает
Set NdM = TreeView4.Nodes.Add(rstM.Fields("Reports").Value, tvwChild, rstM!UnitNameU, rstM!Position & " " & rstM!Organization)
'Не работает
          rstM.MoveNext

End Sub

Сначала нужно добавить корневой объект, потом уже строить ветки.
Например так
Код: plaintext
1.
2.
Set xNode = tvw.AddItem(,,"Root_key","RootText")
Set xNode = tvw.AddItem("Root_key",tvwChild, "Branch_key","Branch_TExt")
В твоем коде нет верхнего уровня с ключами rstM.Fields("Reports").Value
...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32906267
Gumanitary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДуракСтруктуру таблицы покажи.
UnitNameU - String
UnitName - String
Position - String
Reports - String
Organization - String
Num of Members - Числовой

Соответственно,
UnitnameU - ключ,
Reports - ключ родителя,
Unitname - просто наименование, остальное не суть

4d_monsterПопробуй ещё тип привести к строке
Cstr(Ключродителя)
Не понял, пример кодом, плииииз.
Из меня кодер еще тот, к сожалению

all

Дополнительная информация:
- При отладке у меня в таблице одна родит. нода, на тривью появляется две: она и "пробная" (которая в начале вне цикла, взял из примера)
- Дочерние к "пробному" родителю пристают, если в парент писать текст, а не переменную.
- Дочерние к непробному родителю НЕ пристают не зависимо от того, как представлен парент-кей (строка или переменная)
- Когда в дебагере смотрю цикл по родителям, то в imidiate .key, .name и пр. показывет нормально, на тривью выводится
- Когда в дебагере смотрю цикл по дочкам, то нода.index постоянно прирастает до EOF, есть значения для каждой ноды нода.key, .name, .parent, .parent.name, все нормально, НО на тривью не выводит
...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32906282
Gumanitary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlvigaСначала нужно добавить корневой объект, потом уже строить ветки.
Например так
Код: plaintext
1.
2.
Set xNode = tvw.AddItem(,,"Root_key","RootText")
Set xNode = tvw.AddItem("Root_key",tvwChild, "Branch_key","Branch_TExt")
В твоем коде нет верхнего уровня с ключами rstM.Fields("Reports").Value

1. Я думал, что задал первым циклом, поправь, если я чего не догоняю
2. Не понял - AddItem - applies to listbox, combo
...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32906347
Фотография Alviga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gumanitary
Да конечно (метод tvw.Nodes.Add), извините я ошибся.
первым циклом Вы задали корневые ключи
rstM!UnitNameU
а дальше пытаетесь задать дочерние
TreeView4.Nodes.Add PaM, tvwChild, rstM!UnitNameU, rstM!Position & " " & rstM!Organization
а ведь ключей PaM = rstM!Reports
не существует.
Вам в первом цикле нужно было задать ключи rstM!Reports, а потом уже
строить им ветки.
например

Код: plaintext
1.
2.
3.
4.
Set NdM = TreeView4.Nodes.Add(, , rstM!Reports,"rstM!Reports")
потом ветки
Set NdM = TreeView4.Nodes.Add(rstM!Reports, tvwChild, rstM!UnitNameU, rstM!Position & " " & rstM!Organization)

...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32906690
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы не пробовали заполнять TreeView рекурсивно ?
...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32906750
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример рекурсивного наполнения.
Надо открыть ВСЕ записи без фильтра и один раз вызвать функцию
не проверял код. т.к. не использую строковые ключевые поля
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
'. . . . .
'Вызов процедуры
Tree1.Nodes.Clear
Call РекурсивныйПоиск(Null)
'. . . . .
Sub РекурсивныйПоиск(ByVal Parent_id)
   Dim i As Long, Curr_code
   Dim N1 As Node
   rstM.MoveFirst
   rstM.Find "Reports = " & IIf(IsNull(Parent_id), "Null", Parent_id)
   Do Until rstM.EOF
      Curr_code = rstM.felds("UnitnameU")  ' сохраним позицию (рекурсия ее сбивает)
      Set N1 = Tree1.Nodes.Add(Parent_id & "", tvwChild, rstM.Fields("UnitnameU") & "", rstM.Fields("Unitname") & "")
      Call РекурсивныйПоиск(rstM.Fields("Reports"))
      rstM.MoveFirst
      rstM.Find "UnitnameU = " & IIf(IsNull(Curr_code), "Null", Curr_code)   'Восстановить позицию
      If Not rstM.EOF Then rstM.Find "Reports = " & IIf(IsNull(Parent_id), "Null", Parent_id),  1   'Найти следующего потомка
   Loop
End Sub
...
Рейтинг: 0 / 0
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
    #32907844
Gumanitary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ALL!
Надо честно сказать, что, наверное, к кодированию вопрос не относился, скорее к кодированию кодировщика ;-)
То-то я смотрю, индексы прирастают, на уникальность записей ругается, а показывает только родителя (везде кроме 'пробников' из примеров).
Все записи были на месте, а не выпадали из родителей, т.к. просто надо было в Access в свойствах контрола TreeView поставить флажок SingleSel!
Для таких, как я, выкладываю работающий код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Private Sub TreeView4_DblClick()
'Все переменные Publuc
'PaM - String
'RstM - ADODB.Recordset

TreeView4.Nodes.Clear

  ' Заполнение верхнего уровня дерева
Set rstM = CurrentProject.Connection.Execute("SELECT Units.* FROM Units WHERE (((Units.Reports) Is Null));")
   While Not rstM.EOF
Set NdM = TreeView4.Nodes.Add(, , rstM.Fields("UnitNameU").Value, rstM!Organization)
         rstM.MoveNext
    Wend

' Заполнение Подчиненный Уровень
Set rstM = CurrentProject.Connection.Execute("SELECT Units.* FROM Units WHERE (((Units.Reports) Is Not Null))")

   While Not rstM.EOF
         PaM = rstM!Reports
         'TreeView4.Nodes.Add rstM!Reports, tvwChild, rstM!UnitNameU, rstM!Position & " " & rstM!Organization
Set NdM = TreeView4.Nodes.Add(rstM!Reports.Value, tvwChild, rstM!UnitnameU, rstM!Position & " " & rstM!Organization)
          rstM.MoveNext

    Wend

NdM.EnsureVisible
TreeView4.Style = tvwTreelinesText ' Style 4.
'TreeView4.BorderStyle = vbFixedSingle

rstM.Close

End Sub


Еще раз спасибо и сорри
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]