Изменение поля справочника в окне.

Заравствуйте.

Ни как не могу разобраться. Помогите пожалуйста.
Есть окно редактирования, в нём есть поле (выпадающий список) который берётся из поля справочника датасета.
Мне надо при изменении этого поля при определённых условиях менять его на другое значение.
В событии dlDataOnDatasetDataChange отлавливаю его изменения. Присваиваю нужное мне значение:

Self.ComponentsByName('dlData').Dataset.ValAsGUID('StateID') = '{8CC85DB3-38A0-4A6C-B096-3E43041CA5A1}';

Датасет в режиме редактирования, ошибок не возникает, значение меняется (проверял). Но в окне редактирования остаётся старый параметр! Отображантся не то, что есть.
Подстажите пожалуйста как заставить выпадающий список показать правельное значение или как его изменить, чтобы визуальное значение и значение в датасете отображались правельно.

Спасибо!

Нравится

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

Насколько я помню, то на событие OnDatasetDataChange нельзя изменять значение того поля, на изменение которого это событие сработало.
Возможно, вам нужно просто запретить изменение значения в этом поле.

Хм...

Но подождите... Само значение изменяется! Просто эти изменения не отображаются в окне!!! Тоесть ID присваивается, но пользователь пока не закроет и не откроет окно снова об этом не узнает...

Вообщем мне нужно реализовать такую чтуку, чтобы одни пользователи могли выбрать определённое значение справочника, а другие не могли... Даже если я ставлю

Self.ComponentsByName('dlData').Dataset.ValAsGUID('StateID') = null;

, то нул сохроняется, но в окне этого не видно... :exclaim:

Здравствуйте,
В случае с выпадающими списками следует использовать UnprepareDropDownList

Подробнее можно почитать
http://community.terrasoft.ua/forum/topic/1489

если вы поменяете тип лукапного поля на

"Slovarik" написал:то нул сохроняется, но в окне этого не видно

Я думаю, чтобы видно было в окне, вам нужно менять DisplayValue (отображаемое значение) этого поля на нужное.
Например:

DataField.DisplayValue = 'Какое-то значение';

Спасибо. Завтра попробую!

"Кошкаров Андрей" написал:

DataField.DisplayValue = 'Какое-то значение';


Так не работает. Выдаёт "Ошибка выполнения метода 'dlDataOnDatasetDataChange'. Объект не поддерживает это свойство или метод «Call Stack»"
И ID'шку туда писать пробовал и текст... по нулям...

"Яворский Алексей" написал:UnprepareDropDownList

Пробовал я и так... ошибок не возникает, но и изменений не происходит...

Скорее всего, у Вас кешируются значения выпадающего меню.

Чтобы заново получить значения полей справочника для выпадающего меню, добавьте строку кода после изменения:

edtGraph.UnprepareDropDownList();

в данном случае edtGraph - название поля с выпадающим меню.

"Alimova Anna" написал:Скорее всего, у Вас включено кеширование значений выпадающего меню.

А как его выключить? Специально я его не включал...

"Alimova Anna" написал:Чтобы заново получить значения полей справочника для выпадающего меню, добавьте строку кода после изменения:

edtGraph.UnprepareDropDownList();

в данном случае edtGraph - название поля с выпадающим меню.


Я так делал. Изменений не происходит... В датасете правельное значение, а в окне остаётся старое...

Попробуйте очистить кэш и перезапустить Террасофт

Убедитесь, что Вы выполняете очистку в нужном месте: http://www.community.terrasoft.ua/forum/topic/1489#comment-5131

"Кошкаров Андрей" написал:Насколько я помню, то на событие OnDatasetDataChange нельзя изменять значение того поля, на изменение которого это событие сработало.

Так и есть, уловки с DisplayValue не помогут.

Спасибо всем. Пришлось делать по другому :cry:

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