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

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

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

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

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
10.02.2005, 21:32
    #32911111
Oscar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с TreeView + БД
PaulJBУ меня TreeViewItem заполняется при его открытии, поэтому для обновления открытого элемента я его просто закрываю, а затем открываю. Для скорости важно отключить перерисовку TreeView. Работает быстро.
Понятно. А как обновить все дерево, чтобы сохранился общий вид дерева, то есть ветки которые были открыты ... и т.д
...
Рейтинг: 0 / 0
11.02.2005, 12:04
    #32911551
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с TreeView + БД
>А как обновить все дерево, чтобы сохранился общий вид дерева, то есть ветки которые были открыты ... и т.д

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

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

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


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