Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Не обновляются данные после 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.037 c
2-1133519302
kot1110
2005-12-02 13:28
2005.12.18
главная форма


2-1133514762
ЖСВ
2005-12-02 12:12
2005.12.18
Есть ли в Delphi6 объявления типа записи таблицы?


14-1132835209
ArtemESC
2005-11-24 15:26
2005.12.18
Потерял статью...


2-1133522457
Officeman
2005-12-02 14:20
2005.12.18
Надо TPanel таскать по форме! Алгоритм


14-1132695161
Separator
2005-11-23 00:32
2005.12.18
Протокол работы gTalk