Главная страница
    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.014 c
1-1132899472
Тома
2005-11-25 09:17
2005.12.18
Удалить временные файлы


1-1132746255
kyn66
2005-11-23 14:44
2005.12.18
Как записать и вытащить Gif файл из ресурса


2-1133616710
аматор
2005-12-03 16:31
2005.12.18
размер базы Жар птицы


14-1133033373
Некто
2005-11-26 22:29
2005.12.18
Сетевые жёсткие диски


14-1132335263
lookin
2005-11-18 20:34
2005.12.18
У меня тоже пару вопросов...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский