Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1132938352
Fl@sh
2005-11-25 20:05
2005.12.18
Приглашение в Украину!!


14-1132815553
Lexer
2005-11-24 09:59
2005.12.18
С нашего сайта архив стал скачиваться в битом виде


9-1115312340
nikolya
2005-05-05 20:59
2005.12.18
GLScene тени


14-1133210265
DillerXX
2005-11-28 23:37
2005.12.18
far


2-1133357948
Новичек
2005-11-30 16:39
2005.12.18
Небольшой вопрос относительно функции function recv.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский