Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TreeView подставляет дочерние ноды только если они НЕ обозначены переменной / 10 сообщений из 10, страница 1 из 1
08.02.2005, 12:32:20
    #32905809
Gumanitary
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
Код: 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
08.02.2005, 14:23:03
    #32906164
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
Структуру таблицы покажи.
...
Рейтинг: 0 / 0
08.02.2005, 14:31:06
    #32906185
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
Попробуй ещё тип привести к строке
Cstr(Ключродителя)
...
Рейтинг: 0 / 0
08.02.2005, 14:50:24
    #32906240
Alviga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
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
08.02.2005, 15:02:06
    #32906267
Gumanitary
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
ДуракСтруктуру таблицы покажи.
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
08.02.2005, 15:10:24
    #32906282
Gumanitary
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
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
08.02.2005, 15:29:31
    #32906347
Alviga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
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
08.02.2005, 17:34:22
    #32906690
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
А вы не пробовали заполнять TreeView рекурсивно ?
...
Рейтинг: 0 / 0
08.02.2005, 17:59:04
    #32906750
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
Вот пример рекурсивного наполнения.
Надо открыть ВСЕ записи без фильтра и один раз вызвать функцию
не проверял код. т.к. не использую строковые ключевые поля
Код: 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
09.02.2005, 12:15:56
    #32907844
Gumanitary
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView подставляет дочерние ноды только если они НЕ обозначены переменной
Спасибо 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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TreeView подставляет дочерние ноды только если они НЕ обозначены переменной / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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