Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизНе обновляются данные после EnableControls Найти похожие ветки
← →
Ega23 © (2005-11-02 14:49) [0]Есть свой DB-компонент. Потребовалось добавить реакцию на DataSet.Post
Пошёл самым простым путём (как мне показалось):
у потомка TDataLink для данного компонента переопределил метод UpdateData, написал свой обработчик. Всё прекрасно работает, всё что надо - обновляется.
Но как только "обкладываю" DataSet DisableControls/EnableControls - всё перестаёт обновляться.
Как я понимаю, связано это со свойством ActiveControl и "рубится" на уровне TDataSource.
Вопрос: как мне это обойти?
← →
ANB © (2005-11-02 14:56) [1]
> Ega23 © (02.11.05 14:49)
Тупорыло - посему ИМХО. Переопредели EnableControls и воткни туда вызов UpdateData.
← →
Ega23 © (2005-11-02 14:59) [2]
> Тупорыло - посему ИМХО. Переопредели EnableControls и воткни
> туда вызов UpdateData.
Переопределить у TClientDataSet?
← →
ANB © (2005-11-02 15:53) [3]
> Ega23 © (02.11.05 14:59) [2]
Не понял. Ты же вроде свой дейтасет написал. Контролы к нему привязаны ?
← →
Ega23 © (2005-11-02 16:06) [4]
> Не понял. Ты же вроде свой дейтасет написал. Контролы к
> нему привязаны ?
Я свой TDBTreeView написал. Пока у него реакция на DataSet.ActiveChanged и DataSet.DataSetChanged была.
Понадобилось реакцию на обновление данных напрямую в DataSet"е добавить.
← →
ANB © (2005-11-02 16:33) [5]Такс. По идее твой компонент должен получать оповещение через TDataLink о применении методов Disable/Enable. Либо ты эту штуку сломал, либо по прежнему получает, но не работает.
← →
Ega23 © (2005-11-02 16:37) [6]
> Такс. По идее твой компонент должен получать оповещение
> через TDataLink о применении методов Disable/Enable. Либо
> ты эту штуку сломал, либо по прежнему получает, но не работает.
>
Какое событие TdataLink отвечает за это?
← →
ANB © (2005-11-02 16:41) [7]
> Какое событие TdataLink отвечает за это?
Не знаю. Не факт, что есть событие. Надо АП ждать.
← →
ANB © (2005-11-02 17:19) [8]У DataSource есть метод DateEvent
← →
ANB © (2005-11-02 17:21) [9]Кстати, а почему у тебя после Post данные то не обновлялись ? Стандартные компоненты редактирования (в т.ч. EhGrid) обновляются . . . Вроде . . . Во всяком случае новый ID с сервера приезжает.
← →
ANB © (2005-11-02 17:23) [10]Точна - метод вызывается : TDataLink.DataEvent.
← →
Ega23 © (2005-11-02 17:31) [11]
> У DataSource есть метод DateEvent
Значит так. Установил флажок Use Debug DCUs, бросил на форму моё DB-дерево и стандартный DBGrid. Также имеем связку ADOQuery->DataSetProvider->ClientDataSet->DataSource.
Оба компонента "смотрят" на этот DataSource, навигация, синхронизация - всё как надо. Теперь пытаемся апдейтить одно из полей ClientDataSet. Если без Enable/DisableControls - всё ОК. И в гриде и в дереве обновляется текст.
Включаем Enable/DisableControls, ставим точку останова на:
1. TDataSource.DataEvent
2. TGridDataLink.UpdateData; // это потомок TDataLink у грида
3. TTreeDataLink.UpdateData; // это уже мой потомок TdataLink.
Делаем update поля.
Результат:
1. Приходим в TGridDataLink.UpdateData!!!! Т.е. до TDataSource.DataEvent ещё не дошли!
2. Приходим на TDataSource.DataEvent (как я понял, этот переход инициирует непосредственно грид).
В мой обработчик так и не проваливаемся.
← →
Ega23 © (2005-11-02 17:47) [12]Так. Ситуация малость проясняется.
Приходим на TDataSource.DataEvent - это ещё не по команде Post, это по команде Edit. C Post - сложнее...
← →
Владислав © (2005-11-02 17:51) [13]Вопрос на засыпку...
А сравнение и анализ call stack в
TGridDataLink.UpdateData;
TTreeDataLink.UpdateData;
на какие-нибудь мысли не наталкивает?
← →
Ega23 © (2005-11-02 18:03) [14]
> А сравнение и анализ call stack в
> TGridDataLink.UpdateData;
> TTreeDataLink.UpdateData;
> на какие-нибудь мысли не наталкивает?
>
Не-а. В случае, если Disable/EnableControls вллючено до TTreeDataLink вообще ничего не доходит.
А если отключено - то всё ОК.
← →
ANB © (2005-11-03 09:28) [15]
> Ega23 © (02.11.05 18:03) [14]
Пройди отладчиком. В DataSource.DateEvent есть цикл перебора дейталинков. Но для вызова метода линка уть условия по статусу. Нужно понять - почему не отрабатывает. Ctrl+Клик мыши тебе в помощь.
← →
Ega23 © (2005-11-03 11:06) [16]
> Пройди отладчиком. В DataSource.DateEvent есть цикл перебора
> дейталинков. Но для вызова метода линка уть условия по статусу.
> Нужно понять - почему не отрабатывает. Ctrl+Клик мыши тебе
> в помощь.
>
Значит так. Все изыски привели к следующему:
1. Событие действительно проходит. Только не UpdateData, а RecordChanged. Проходит оно после включения EnableControls (до этого вообще никаких событий до DataSource не доходит).
2. Перечитывать приходится всё дерево. В отличие от DBGrid"а я не могу "кусками" данные читать.
Вот такие вот результаты.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c