Как получать значения DatasetLink через елемент, привязанный к нему?

Создал SelectScript, на основе его создал ds_Query. На форме создал невизуальный елемент dlData с привязкой к ds_Query. Создал елемент LookupControl с именем el_Data, првязав к нему dlData.

Написал такой код:

function el_DataOnChange(LookupControl) {
        ShowInformationDialog(dlData.Dataset('SupplierID'));
}

Если значение елемента el_Data поменять программно через Value, то вышеприведённая функция выдаст правильный результат, соответствующий запросу.

Если же значение елемента поменять через окно мышкой или клавиатурой, то функция покажет пустое информационное окно. В чём проблема?

ЗЫ. Пробовал дописывать dlData.Open() и dlData.Close() - не помогло

Нравится

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

попробуйте использовать LookupDataControl, у него идет "привязка" к датасету и при изменении значения в контроле -- оно меняется (при сохранении) и в датасете.
Что у Вас за задача вообще? потому что немного странный код: при изменении значения показывать его, причем даже не текст, а ИДшку... что именно Вы хотите сделать?

У меня задача такая:
в моём елементе перечислены фамилии некоторых сотрудников. При выборе фамилии выбор должен записатся в БД с привязкой к текущему пользователю. При следующем входе под данным пользователем, в елементе должна отображатся фаимилия, которую юзер выбрал последний раз.
Для етого я создал таблицу ContactForUser, в котором есть два поля: UserID и ContactID. При выборе какой-то фамилии из списка, находится ID контакта по таблице tbl_Contact и записывается в ContactID. А в UserID указывается Connector.CurrentUser.ContactID;
А вышеописанная функция ето всего лиш проверка значения LookupControl, которое я буду потом в таблицу записывать.

Да, и по совету "попробуйте использовать LookupDataControl" он мне пишет:
Невозможно установить имя поля "Name" для компонента "el_Data"

UserID это обычно ID из таблицы tbl_AdminUnit (раздел пользователи). Вы точно ничего не путаете?)

если нет, то
см сюда http://terrasoft.ru/sdk/ILookupControl.html
а потом сюда
http://terrasoft.ru/sdk/ILookupDataControl.html
и смотрите отличия)

если же Вам не надо сохранять выбранное значение через датасет, то надо будет на OnPrepare окна добавить функцию присвоения сохраненного (не через датасет) значения в Ваш LookupControl.
Вам поможет
http://terrasoft.ru/sdk/ILookupControl__SetValueAndText@[in]_BSTR@[in]_BSTR.html

"Малахов Дмитрий" написал:
Если же значение елемента поменять через окно мышкой или клавиатурой, то функция покажет пустое информационное окно. В чём проблема?

Проблема в том, что Вы не сохраняете выбранное в LookupControl-е значение в датасет. Соответственно при повторном открытии окна отображается пустое значение.
Если Вам нужно сохранять введенное в LookupControl значение в датасет, затем его отображать при открытии, следует:
1. В момент инициализации окна считать значение из датасета и записать его в LookupControl:

edtLookupControl.Value = ......;

2. При закрытии окна сохранять значение, введенное в LookupControl в датасет:

Dataset.Values('FieldName') = edtLookupControl.Value
Показать все комментарии