powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Помогите с TreeView + БД
12 сообщений из 12, страница 1 из 1
Помогите с TreeView + БД
    #32907129
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я связал объект TreeView с данными из БД для представления иерархии организации. Проблема заключается в том, что надо сделать возможность добавления, удаления и редактирования записей с мгновенным изменением в дереве.

Я думаю что обновление (!) всего дерева будет очень неэффетивно учитывая лишние обращения к БД (хотя записей мало). Скажите, пожалуйста, как можно решить эту проблему? Я думаю, что сам стадартный объект TreeView от PB является очень неудобным. Тем не менее, я хочу его использовать и не лезть в PFC.

Я очень надеюсь получить какие либо предложения и рекомендации. Большое Спасибо заранее!
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32908959
Mykola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда посмотри примеры из PowerBuilder или как реализовано в pfc
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32909026
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня TreeViewItem заполняется при его открытии, поэтому для обновления открытого элемента я его просто закрываю, а затем открываю. Для скорости важно отключить перерисовку TreeView. Работает быстро.
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32909453
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня реализованно следующим образом:
(но я пока изучаю РВ и незнаю правильный ли у меня подход)

Имеется функция

f_tv_ied (eid integer)
Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
String ls_mess
String ls_dberr
str_sp_lg sp
Integer li_tv_ind
TreeViewItem l_tv

if ied =  1  then
	sp.ie =  1 
	sp.id = Integer(st_id_lg.text)
	sp.razdel = st_razdel.text
	OpenWithParm(w_sp_lg,sp)
	
	ls_mess = Message.stringparm
	if ls_mess<>'-1' then tv_sp_lg.insertitemfirst( Integer(st_lg_ind.text) , ls_mess,  1 )
end if

if ied =  2  then
	sp.ie =  2 
	sp.id = Integer(st_id_lg.text)
	sp.razdel = st_razdel.text
	OpenWithParm(w_sp_lg,sp)

	ls_mess = Message.stringparm
	li_tv_ind = Integer(st_lg_ind.text)

	if ls_mess<>'-1' then 
		tv_sp_lg.getitem( Integer(st_lg_ind.text), l_tv)
		l_tv.label = ls_mess
		tv_sp_lg.setitem( Integer(st_lg_ind.text), l_tv)
		tv_sp_lg.selectitem (li_tv_ind)
	end if
end if

if ied =  3  then
	if messagebox("Удаление","Вы действительно хотите удалить каталог ?", Exclamation!, OKCancel!)= 1  then
		li_tv_ind = Integer(st_lg_ind.text) 
		tv_sp_lg.getitem(li_tv_ind , l_tv)

		DELETE FROM sp_lg where id_lg=:st_id_lg.text;
		if sqlca.sqlcode<> 0  then
		ls_dberr = КАТАЛОГ: /'+String(l_tv.Label)+ '/ удалить невозможно '+ String(sqlca.sqlerrtext)
			rollback;
			MessageBox('Ошибка удаления', ls_dberr)
			return
		else
			tv_sp_lg.deleteitem(li_tv_ind)
			commit;
		end if
	end if
end if

На кнопках:
Добавить f_tv_ied(1)
Редактировать f_tv_ied(2)
Удалить f_tv_ied(3)

P.S. Если что не так, подскажите как правильно и лучьше.
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32911111
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulJBУ меня TreeViewItem заполняется при его открытии, поэтому для обновления открытого элемента я его просто закрываю, а затем открываю. Для скорости важно отключить перерисовку TreeView. Работает быстро.
Понятно. А как обновить все дерево, чтобы сохранился общий вид дерева, то есть ветки которые были открыты ... и т.д
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32911551
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А как обновить все дерево, чтобы сохранился общий вид дерева, то есть ветки которые были открыты ... и т.д

У меня такой проблемы не возникало, т.к. в один момент времени обновляется только одна ветка.
Тут надо думать. А для чего это делается, может есть другой выход ?
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32911804
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulJB>А как обновить все дерево, чтобы сохранился общий вид дерева, то есть ветки которые были открыты ... и т.д

У меня такой проблемы не возникало, т.к. в один момент времени обновляется только одна ветка.
Тут надо думать. А для чего это делается, может есть другой выход ?
Спасибо, что ответили. Дело в том, что как я говорил раньше TreeView совмещен с DataWindow, и в последнем реализовано меню для добавления, удаления и редактирования отдельных записей. Так вот добавлять можно в любое место дерева, а лезть и изменять другие объекты нельзя поэтому приходится обновлять все дерево. Но записей не много поэтому проблем с нагрузкой не должно возникуть. Вы не скажите где про это можно почитать? Относится ли это как то к теории графов? Спасибо заранее!
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32912693
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно попробовать вспомнить про ООП и реализовать следующее:
при вставке элемента в treeview указывать не только Label и ID записи в БД, а создавать объект, который содержит всю необходимую информацию о элементе и умеет обновлять себя в дереве. Ссылку на объект присваивать свойству Data в TreeviewItem, также эту ссылку регистрировать в менеджере объектов, который будет рассылать сообщения. При изменении данных в dataWindow сообщение об этом событии с указанием значения ключевого поля отправляется менеджеру объектов, который перенаправляет сообщение нужному объекту, привязанному к treeviewitem. При изменении Label или удалении элемента все понятно, при изменении родителя объект должен уметь удалить свой элемент в treeview и вставить в нужном месте, вместе с детьми.
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32912712
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rcryoможно попробовать вспомнить про ООП и реализовать следующее:
при вставке элемента в treeview указывать не только Label и ID записи в БД, а создавать объект, который содержит всю необходимую информацию о элементе и умеет обновлять себя в дереве. Ссылку на объект присваивать свойству Data в TreeviewItem, также эту ссылку регистрировать в менеджере объектов, который будет рассылать сообщения. При изменении данных в dataWindow сообщение об этом событии с указанием значения ключевого поля отправляется менеджеру объектов, который перенаправляет сообщение нужному объекту, привязанному к treeviewitem. При изменении Label или удалении элемента все понятно, при изменении родителя объект должен уметь удалить свой элемент в treeview и вставить в нужном месте, вместе с детьми.

Большое спасибо за ответ! Я думаю это действительно должно получится. Сейчас начну копать в этом напрвление! Спасибо
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32913564
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я использую PowerBuilder 9, но в документации к сожалению не нашел каких либо упоминаний об Object Manager! Прочитал о регистрации и использовании SharedOBjects но это ли то, что Вы имели ввиду? Спасибо заранее за ответ.
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32913569
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oscar, Mенеджер объектов ВЫ должны написать :-)
...
Рейтинг: 0 / 0
Помогите с TreeView + БД
    #32913583
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппOscar, Mенеджер объектов ВЫ должны написать :-) Ахахаха ... да насмешил конечно я Вас. Я только начинающий в PowerBuilder, и изучаю уже как ~ 3 недели. Скажите как перехватывать сообщения ... и вообще есть ли примеры где это реализовано. Я буду очень признателен ответам со ссылками на ресурсы в сети и с примерами. Спасибо!
P.S Мне очень важно решить эту проблему!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Помогите с TreeView + БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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