Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос про treeview, refresh как сделать?? 
V
    Опции темы
comtat
  Дата 12.5.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 3
Всего: 71



Загружаю в treeview из БД узлы
все работает ОК

Заношу новый узел он создается нормально

как сделать штобы он стал виден (treeview его не показывает, 
отображается только при новом запуске приложения)

у ShellTreeView есть Refresh как сделать такое для TreeView

или другой метод решения   smile  


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
Rouse_
Дата 12.5.2006, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



invalidate, а вообще показывай код добавления, все там нормально должно отображаться... 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
comtat
Дата 12.5.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 3
Всего: 71



вот оно

Код

procedure TForm5.Button2Click(Sender: TObject);
var NUM:integer;
begin
   // заполнение
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Add('INSERT into tree VALUES(2,:NUM,:NAME,1,3)');
   IBQuery1.ParamByName('NUM').asString:=IntToStr(NUM);
   IBQuery1.ParamByName('NAME').asString:=Form5.Edit1.Text;
   IBQuery1.Open;

   //Form2.TreeView1.Items.Delete(Form2.TreeView1.TopItem); //чистит treeview

   Form5.Close;
end;
 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
Dynamic
Дата 12.5.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



правильно,а в дерево ты при этом не заносишь, поэтому обновляется только при перестроении всего дерева. Добавь сюда вставку нвого узла в соответствие с твоим алгоритмом вставки. 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
comtat
Дата 12.5.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 3
Всего: 71



Dynamic Это верно замечено

поэтому поводу
делаю так 

Код

var CanBeExpanded: Boolean;

Form2.TreeView1.Items.Delete(Form2.TreeView1.TopItem); // удаляет root
  Query1.SQL.Clear;
  Query1.SQL.Add('SELECT ID, NUM, NAME, LEGATEES, IND FROM tree WHERE ID = :ID');
  CanBeExpanded := true;
  // открывает узлы root (nil).
  TreeView1Expanding(self, nil, CanBeExpanded);


но обновления нет

такое очучение что не хватает как в SQl (commit) 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
vv3
Дата 12.5.2006, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 29.4.2006

Репутация: нет
Всего: нет



Ничего не понял...
Почему не сделать наоборот - загнать добавление/удаление в базу данных в замечательные события TTreeView onAddition и onDeletion?
Код

procedure TForm1.TreeView1Addition(Sender: TObject; Node: TTreeNode;
  var S: String);
begin
 IBQuery1.Transaction.StartTransaction;
 IBQuery1.ParamByName('NODE_NAME').AsString:= Node.Text;
 IBQuery1.Open;
 IBQuery1.Transaction.Comit; 
end;
 
PM MAIL   Вверх
comtat
Дата 12.5.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 3
Всего: 71



Щас попробую 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
comtat
Дата 19.5.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 3
Всего: 71



vv3, пробовал так не катит

ругается типа "Transaction is active"


может еще как нибудь можно ??  smile  


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
Dynamic
Дата 21.5.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Цитата(comtat @  19.5.2006,  21:13 Найти цитируемый пост)
ругается типа "Transaction is active"

ругается на 
Код

IBQuery1.Transaction.StartTransaction;

напиши так
Код

if not IBQuery1.Transaction.Active then 
  IBQuery1.Transaction.StartTransaction;
 

 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
comtat
Дата 21.5.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 3
Всего: 71



Dynamic, попробовал ты был прав,
щас ошибки нет, но и обновления тоже нет


может еще как нибудь можно ??  


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
Alex
Дата 21.5.2006, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



А воспользоваться готовыми решениями http://ibase.ru/develop.htm#tree не проще?  


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
comtat
Дата 22.5.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 3
Всего: 71



щас попробую воспользоваться 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
vv3
Дата 22.5.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 29.4.2006

Репутация: нет
Всего: нет



Обновления чего нет???
Alex, воспользоваться готовыми решениями значит никогда не научиться самому... smile smile  Хотя в цейтноте, конечно, готовые решения помогают. 
PM MAIL   Вверх
Alex
Дата 22.5.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(vv3 @  22.5.2006,  23:02 Найти цитируемый пост)
Alex, воспользоваться готовыми решениями значит никогда не научиться самому... smile smile  Хотя в цейтноте, конечно, готовые решения помогают.

Угу, то-то я пока не разбиру по "косточкам" последнии года два эти готовые решения, то фиг поймешь как их применять smile Готовое это зачастую написанная рутина, но лично я еще не видел ни одного готового, которое покрывало бы мои потребности на все 100%, все равно что-то правится, дописывается... 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
vv3
Дата 22.5.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 29.4.2006

Репутация: нет
Всего: нет



Да, извиняюсь, зачем зашел-то...
Код

if IBQuery1.Transaction.Active then IBQuery1.Transaction.Commit;
IBQuery1.Transaction.StartTransaction;

Вот так гарантированно никаких ошибок....

Итак, с самого начала:
На форме TreeView1, Edit1 с надписью "Имя новой ветки дерева", Button1 с Caption "Добавить", 
IBSQL1 с чем-нибудь вроде: 
Код

INSERT INTO MY_TREE_TABLE (ID_NODE, TEXT_NODE)
 VALUES(GEN_ID(ID_NODE_GENERATOR, 1), :NODENAME) 

Каим-то там образом загружаем дерево из базы (пока нас это не тревожит - мы создаем и "обновляем", то есть делаем так, чтобы при добавлении ветки в дерево, она не только записывалась в базу данных, но и сразу отображалась в дереве)

Вписываем в Edit1 'Это наша пробная ветка' и нажимаем кнопку Button1:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Selected:= TreeView1.Items.AddChild(TreeView1.Selected, Edit1.Text);
//добавляем ветку с именем, введенным в Edit1 и одновременно выбираем ее текущей
//если это первая ветка, то параметр TreeView1.Selected = nil если нет, то выделенная
//в момент добавления генерируется событие onAddition, которое мы и ловим ниже
end;

procedure TForm1.TreeView1Addition(Sender: TObject; Node: TTreeNode);
begin
if IBSQL.Transaction.Active then IBSQL.Transaction.Commit; //перестраховочная проверка - вдруг 
                                                                                              //мы раньше забыли откоммитить транзакцию.
IBSQL1.Transaction.StartTransaction; //стартуем пишущую транзакцию, без нее мы ничего не запишем
IBSQL1.ParamByName('NODENAME').AsString:= Edit1.Text; //Внимание! Не TreeView1.Selected.Text, 
             //потому что в этот момент новая ветка еще не создана и в параметр попадет либо
             //родительская ветка, либо nil
IBSQL1.ExecQuery; //добавили запись в таблицу
IBSQL1.Transaction.Commit; // откоммитили изменения
end;

И в дереве все появилось, и в таблицу записали. Кто не верит, - может проверить smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.