GUI
кнопка
контролы
обработчик
переопределить
событие
форма
Технические вопросы
7.x

Добрый день!

Подскажите, каким образом можно найти и переопределить обработчики событий стандартных контролов(например, кнопки Сохранить)?
Возможно ли изменить их стиль?

Спасибо!

Нравится

1 комментарий

Здравствуйте!

По сути это две задачи:
1) Изменить стиль (BasePageV2CSS)
2) Изменить обработчики (метод onCardAction, который вызывается при нажатии на кнопку "Сохранить")

Показать все комментарии
Dataset
dlDataOnDatasetDataChange(DataField)
обработчик
Технические вопросы
Разработка

Где задаётся обработчик событий элементов карточки редактирования сервиса, в случае, если в свойствах невизуальных компонентов этого сервиса явно не задан Dataset?
Попробовал добавить обработчик dlDataOnDatasetDataChange(DataField) на событие OnDatasetDataChange невизуального компонента dlData - не работает (обработчик не вызывается).

Нравится

19 комментариев

дело в том, что

function dlDataOnDatasetDataChange(DataField)

вызывается по полю, а чтобы у вас было поле, вам нужен датасет :smile:

Ок. Получается, обязательно нужно привязывать датасет?

Алексей, если Вам нужно событие OnDatasetDataChange - то разумеется у Вас должен быть датасет, чтобы сработало это событие.
Если он явно не указан в дизайнере окна, скорее всего он инициализируется на OnPrepare событии окна:

dlData.Dataset = Services.GetNewItemByUSI('ds_Account');

Дмитрий,
а правильно ли я понял, что при привязке датасета к даталинку события датасета вызывают обработчики событий даталинка, из которых уже вызываются обработчики событий датасета?

Я добавил в обработчик события OnPrepare следующую строку:

dlData.Dataset = Services.GetNewItemByUSI('ds_Offering');

К сожалению, всё осталось по-прежнему, обработчик dlDataOnDatasetDataChange(DataField) на событие OnDatasetDataChange невизуального компонента dlData - не вызывается.

у вас это свойство ведь заполнено?

"Андросов Дмитрий" написал:

Дмитрий,

а правильно ли я понял, что при привязке датасета к даталинку события датасета вызывают обработчики событий даталинка, из которых уже вызываются обработчики событий датасета?


Дмитрий, нет, сначала срабатывают обработчики события DataLink'a, если конечно датасет ему присвоен, и обработчики событий определены.
Затем срабатывают события самого сервиса датасета.
Они - независимы.

Алексей, я так и не понял, у Вас получилось добиться отработки события?

Этой строчкой вы пробуете впихнуть весь датасет в карточку

dlData.Dataset = Services.GetNewItemByUSI('ds_Offering');

Указать датасет невизуально довольно тонкий процесс (это означает вы хотите сделать один грид и одну карточку редактирования для нескольких похожих сущностей, иначе легче указать датасет сразу), посмотрите в качестве примера окна wnd_OfferingDetailEdit и wnd_OfferingsDetailTreeArea и их скрипты.
Эти окна предназначены для продуктов в счетах, документах и договорах. Можно заметить, что там привязка датасета идет не в карточке, а перед открытием карточки, т.е. в гриде.

"Олейник Дмитрий" написал: Алексей, я так и не понял, у Вас получилось добиться отработки события?
Дмитрий, нет, не получилось.

Давайте, я опишу ситуацию поподробнее.

Я создал новую пользовательскую карточку редактирования.
Вот такую: http://www.community.terrasoft.ru/forum/topic/9879#comment-44071
Сейчас мне нужно блокировать/разблокировать соответствующие поля ввода (поля, определяющие размер скидки) в зависимости от выбранного "радиобуттона" (относительное или абсолютное значение скидки).

Формы раздела (гриды, воркспейсы, карточки редактирования), в котором находится новый воркспейс, не имеют явного задания в свойствах невизуальных компонентов Dataset-ов.
Моя новая пользовательская форма (карточка редактирования wnd_SetDiscountInInvoice) также не имеет явной привязки датасета.

Объясните, пожалуйста, как обрабатывать события?
Вариант "поздней" привязки датасета по событию OnPrepare предложенный Дмитрием Олейником (http://www.community.terrasoft.ru/forum/topic/10032#comment-44333) "не прокатил".

а у вас к "радиобуттону" поле датасета привязано? ну так, проверьте на всякий случай .... :lol:

у контролов есть свои события, которые я вам и предлагаю обрабатывать

Алексей, я так предполагаю, что датасет в Вашей форме вообще не нужен, а на кнопку ОК у вас отрабатывается какой-то скрипт, да?
Так почему бы не повесить блокировку/разблокировку полей на события OnClick на радиобатонах?

"Андросов Дмитрий" написал:а у вас к "радиобуттону" поле датасета привязано? ну так, проверьте на всякий случай ....


"Ткните", где в свойствах "радиобуттона" можно привязать датасет, или это ирония?

"Сазанов Александр Владимирович" написал:

Алексей, я так предполагаю, что датасет в Вашей форме вообще не нужен, а на кнопку ОК у вас отрабатывается какой-то скрипт, да?

Так почему бы не повесить блокировку/разблокировку полей на события OnClick на радиобатонах?


Ок, я так и поробую, просто судя по тому, что пишут другие коллеги-программисты можно как-то по-другому, хочется узнать как.

Алексей, согласен с Александром - если у Вас в картчоке не используется привязка в данным (нет датасета), зачем использовать событие OnDatasetDataChange?
Используйте событие контролов...

"Алейник Алексей Вадимович" написал:или это ирония?

это ирония

В общем, "радиобатон" (батон? радио? брр) radiobutton нельзя привязать к полю датасета\даталинка, поэтому, что бы вы с ним ни делали, событие dlDataOnDatasetDataChange, как и любые другие события для dlData, не произойдет.

Поэтому воспользуйтесь советом Александра Сазанова:

"Сазанов Александр Владимирович" написал:повесить блокировку/разблокировку полей на события OnClick на радиобатонах

Спасибо всем! Всё замечательно получилось!:twisted:

"Андросов Дмитрий" написал:

В общем, "радиобатон" (батон? радио? брр)


радиобатон

"Андросов Дмитрий" написал:В общем, "радиобатон" (батон? радио? брр)

Сударь, ну мы же не тех. документацию пишем, соответственно я счел вполне уместным употребить такой жаргон. Искренне прошу меня извинить, господа, если я вас чем-то обидел.

Показать все комментарии