powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять treeview
11 сообщений из 11, страница 1 из 1
Опять treeview
    #32536836
ozerjan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
				
otd=contents.contentid
max_sotr=RECCOUNT()
Insert Into contents(contentid,parentid,nickname,Forms,bases);
	VALUES (max_sotr+ 1 ,otd,'Новый сотрудник','3','sotr')
ind="_"+Alltrim(Str(otd))+"_"
Thisform.Treemain.Nodes.Clear()
=Seek( 0 ,'Contents','ParentID')
Local Key_
lcNewKey = "_"+Ltrim(Str(contents.contentid))+"_"
With Thisform.Treemain
       .Nodes.Add(,,Key_,Alltrim(contents.nickname))
       .Nodes.Add(Key_, 4 ,"TEMP"+Key_,"")
       .Nodes(Key_).Selected=.T.
       .Nodes(Key_).Expanded=.T.
Endwith
Thisform.Treemain.Nodes(ind).Selected  = .T.
Thisform.Treemain.Nodes(ind).Expanded = .T.

такой вот кусок кода, выдаёт ошибку "OLE IDispatch exception code 0 from Nodes: Element not found..."
Подскажите пожалуйста, что делать?
...
Рейтинг: 0 / 0
Опять treeview
    #32536875
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так я не понял, у тебя такое большое количество опечаток или так и должно быть?

-) Объявил и используешь переменную Key_, а присваиваешь значение переменной lcNewKey.

Естесственно, выполнение .Nodes.Add(,,Key_,Alltrim(contents.nickname)) даст ошибку, поскольку Key_=.F.

-) Где операция создания узла со значением ключа ind (lcNewKey)?
...
Рейтинг: 0 / 0
Опять treeview
    #33000095
Nimka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня точно такая же ошибка выдается на строчке помеченной ***

Я смотрю Debuggerом Значения parenid="10_", id="45_", name корректные !!!
уже голову сломала не пойму в чем дело

SELECT tmpTreeView
SCAN
IF ALLTRIM(parentid) = '0_'
o.ADD(,1,ALLTRIM(id),ALLTRIM(name),0)
ELSE
*** o.ADD(ALLTRIM(parentid),4,ALLTRIM(id), ALLTRIM(name),0)
ENDIF
ENDSCAN

Пример я взяла из http://www.foxclub.ru/sol/index.php?act=view&id=436
Как только заношу дочерние узлы, для родителя с кодом "10_" возникает эта ошибка. Все проверяла верно. из-за чего?
...
Рейтинг: 0 / 0
Опять treeview
    #33000141
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Не все йогурты одинаково полезны"

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

В данном случае, значение ключа узла должно начинаться с символа, отличного от цифры. Т.е. ключи надо формировать примерно так:

parenid="_10_", id="_45_"
...
Рейтинг: 0 / 0
Опять treeview
    #33001586
Nimka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В данном случае, значение ключа узла должно начинаться с символа, отличного от цифры. Т.е. ключи надо формировать примерно так:

parenid="_10_", id="_45_"[/quot]
А почему такиое ограничения? С чем это связано? Я смотрела пример в Solution про TreeView там тоже ключи начинались с цифры.

А пример я просто разбирала, т.к. хочу узнать про treeview и использовать его в дальнейшем
...
Рейтинг: 0 / 0
Опять treeview
    #33001591
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nimka ВладимирМВ данном случае, значение ключа узла должно начинаться с символа, отличного от цифры. Т.е. ключи надо формировать примерно так:

parenid="_10_", id="_45_"
А почему такиое ограничения? С чем это связано? Я смотрела пример в Solution про TreeView там тоже ключи начинались с цифры.

А пример я просто разбирала, т.к. хочу узнать про treeview и использовать его в дальнейшем
Это связано с особенностями передачи параметров в ActiveX-компоненты. Если значение ключа начинается с цифры, то, при определенных обстоятельствах (каких - не вполне ясно) происходит автоматическая конвертация символьной строки в число. Т.е. в числовой тип данных. А значение Key узла не может принимать числовые данные. Отсюда сообщение об ошибке.

Об объекте TreeView более подробно можно почитать здесь

http://kodu.neti.ee/~juri4/vfpplus/ax_treeview_faq_01_ru.htm
...
Рейтинг: 0 / 0
Опять treeview
    #33012304
Nimka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT station.idcod, station.parentid, station.nametext;
FROM station;
WHERE station.folder = .T.;
ORDER BY station.parentid ;
INTO CURSOR tmpTreeView
o = THISFORM.oleTree.Nodes
o.Clear
SELECT tmpTreeView
SCAN
IF ALLTRIM(parentid) = '_0_'
o.ADD(,1,ALLTRIM(idcod),ALLTRIM(nametext),0)
ELSE
o.ADD(ALLTRIM(parentid),4,ALLTRIM(idcod), ALLTRIM(nametext),0)
ENDIF
ENDSCAN
USE
IF !EMPTY(tmpTreeView)
SELECT tmpTreeView
Endif

Я уже все перепробовала, оставила только этот код при загрузке формы, и все равно ошибка повторяется о том что Элемент не найден. Хотя idcod и parentid начинаются не с цифры а имеют такой вид _1_, _2_, _3_
...
Рейтинг: 0 / 0
Опять treeview
    #33012431
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глянь тут http://www.caws.atnet.ru/vfox/vfoxpro1.html. Может поможет.
...
Рейтинг: 0 / 0
Опять treeview
    #33012564
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NimkaSELECT ... ORDER BY station.parentid ...
o = THISFORM.oleTree.Nodes
o.Clear
SELECT tmpTreeView
SCAN
IF ALLTRIM(parentid) = '_0_'
o.ADD(,1,ALLTRIM(idcod),ALLTRIM(nametext),0)
ELSE
o.ADD(ALLTRIM(parentid),4,ALLTRIM(idcod), ALLTRIM(nametext),0)
ENDIF
ENDSCAN
...
Я уже все перепробовала, оставила только этот код при загрузке формы, и все равно ошибка повторяется о том что Элемент не найден. Хотя idcod и parentid начинаются не с цифры а имеют такой вид _1_, _2_, _3_
Проблема именно в способе отбора записей. Вот это самое ORDER BY station.parentid

Представь себе, что у тебя есть такие записи

station.parentidstation.idcod_0__3__2__1__3__2_
С точки зрения структуры дерева все абсолютно корректно. Ветка имеет вид:
Код: plaintext
1.
2.
3.
_3_ 
   |_2_ 
       |_1_

Но с точки зрения твоего кода - это ошибка, поскольку при построении второго узла будет предпринята попытка сослаться на несуществующего родителя (_2_).

В общем случае невозможно корректно выстроить записи таблицы, чтобы построить дерево за один проход. Точнее, это можно сделать, если ввести дополнительные поля сортировки.

В твоей структуре подобная задача решается только через рекурсию.

А вообще-то, никто не строит сразу все дерево. Это слишком долгий процесс. Обычно строят только первый уровень с фиктивнымми узлами и в момент раскрытия узла достраивают следующий уровень.
...
Рейтинг: 0 / 0
Опять treeview
    #33012640
Фотография Диченка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМА вообще-то, никто не строит сразу все дерево. Это слишком долгий процесс. Обычно строят только первый уровень с фиктивнымми узлами и в момент раскрытия узла достраивают следующий уровень.

+1
...
Рейтинг: 0 / 0
Опять treeview
    #33012832
Nimka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь понятно. Спасибо за подробной объяснение!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять treeview
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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