TDBGrid , TDataSet и проблем с AfterOpen

TPAKTOPA
Дата: 19.11.2007 16:07:21
Ситуация: Компонент "привязываем" к TDBGrid, фичу добавляем к специальной колонке. Ета фича добавляется
1. перехват TDataSet.AfterOpen ( в конкретно случае - TIBQuery ).
2. Обход колонок, и если найдена "наша", добавление функциональности.
Все работает хорошо и красиво.

Проблем: Если TDataSet.DisabledControl = true , тогда во время TDataSet.AfterOpen у TDBGrid-а нету колонок. Или точнее, есть одна, но без Field-a. Как только TDataSet.DisabledControl = false, колонки "приходят" у TDBGrid-a с TDataSet-a. А event-ов на ето - нету !

Вопрос: Как мне "перехватить" DBGrid ПОСЛЕ момент-а получения колонок ?

P.S. Извиняюсь за дублирование поста. Впервой по ошибке положил в ошибочний раздел - С++
Johnmen
Дата: 19.11.2007 16:12:26
Зачем чего-то ловить, если уже есть "событие" TDataSet.DisabledControl = false?
TPAKTOPA
Дата: 19.11.2007 16:52:18
Johnmen
Зачем чего-то ловить, если уже есть "событие" TDataSet.DisabledControl = false?

Ето не "событие" , а состояние.

Мне надо уловить TDataSet.AfterOpen, когда DBGrid - уже со всеми колонками. В частном случае, когда TDataSet.DisabledControls = false, тогда еще НЕТУ колонок у DBGrid-a. Хотя уже ДатаСет - открит. И ето - проблем.
Anatoly Podgoretsky
Дата: 19.11.2007 16:57:14
DisabledControl можно использовать с любой стороны, и справа и слева
TPAKTOPA
Дата: 19.11.2007 17:46:53
Anatoly Podgoretsky
DisabledControl можно использовать с любой стороны, и справа и слева

1. Да чего общего ето имеет с темой ?
2. Вообще ето не так пишется.
3. И ето НЕЛЬЗЯ использовать с двух сторон ( хотя би в моей версии )
miksoft
Дата: 19.11.2007 17:58:34
TPAKTOPA
Проблем: Если TDataSet.DisabledControl = true , тогда во время TDataSet.AfterOpen у TDBGrid-а нету колонок. Или точнее, есть одна, но без Field-a. Как только TDataSet.DisabledControl = false, колонки "приходят" у TDBGrid-a с TDataSet-a.
Как вариант - оперируйте не колонками грида, а колонками датасета.
TPAKTOPA
Дата: 19.11.2007 18:02:45
miksoft
Как вариант - оперируйте не колонками грида, а колонками датасета.
Не поедет, меняю характиристики колонки , пример
Col.ButtonStyle = cbsEllipsis;
Где Col типа TColumn
miksoft
Дата: 19.11.2007 18:14:35
варианты:
1) создавайте статичные колонки
2) добавляйте ваш функционал не только в TDataSet.AfterOpen, но и после каждого TDataSet.EnableControls
2.1) вынесите ваш функционал в функцию и вызывайте ее и из TDataSet.AfterOpen, и после каждого TDataSet.EnableControls
Johnmen
Дата: 19.11.2007 18:42:42
TPAKTOPA
...

По-моему, ты тормозишь.
Ибо никто тебе не мешает в твоем TDataSet.AfterOpen перед "обходом колонок" сделать EnableControls.
TPAKTOPA
Дата: 19.11.2007 19:08:20
miksoft
варианты:
1) создавайте статичные колонки
2) добавляйте ваш функционал не только в TDataSet.AfterOpen, но и после каждого TDataSet.EnableControls
2.1) вынесите ваш функционал в функцию и вызывайте ее и из TDataSet.AfterOpen, и после каждого TDataSet.EnableControls


1) Не пойдет - функционал, ето компонент. Вешаеш 3 properties, и все сам делает далшье ( и с базой работает). Пользуется во многих различных екранов.
2) Ага. Етого я и хочу. Не не знаю как к even-ту посел TDataSet.EnableControls подвесится - нету такого ( или хотя бы я не нашел)
2.1) Точь-в-точь что мне надо будет сделать, раз колонок нету в частном случае DisabledControls. Но как подключится к етому ? Есть указатель к DataSet-у.

Johnmen
По-моему, ты тормозишь.
Ибо никто тебе не мешает в твоем TDataSet.AfterOpen перед "обходом колонок" сделать EnableControls.

Мешает. Раз контроли неактивны, значит есть какая-то причина для етого. Конкретно в етом - в BeforEdit делается DisableControls, транзакция закрывается, открывaeтся, все опят считывается, позиционируется на нужную колонку, входим опят в режим dsEdit, и ТОЛЬКО ТОГДА контроли опят активируются.
Если ето не делать так, то теряется первая буква когда начинаем редактировать, и екран "подскакивает" во время опреснения. С буквой - легко, но "подскок" ...

Надеюсь не убежим опять от темы - Как "перехватить" DBGrid ПОСЛЕ момент-а получения колонок в RunTime?