В карточку звонка добавил два LookupDataControl. В зависимости от того, какое значение выбрано в LookupDataControl1, значения в LookupDataControl2 меняются. Фильтрацию делал в с помощью:
function edtTypeOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
var TypeID = dlData.Dataset('TypeID');
var LookupDataset = edtResult.DataField.LookupDataset;
ApplyDatasetFilter(LookupDataset, 'CallTypeID', TypeID,
!IsEmptyGUID(TypeID));
}
а обновлял с помощью:
function dlDataOnDatasetDataChange(DataField) {
edtResult.UnprepareDropDownList();
edtPrichina.UnprepareDropDownList();
}
Но при выборе значений LookupDataControl2 вылетает ошибка List index out of bounds (разные числа)
В чем может быть проблема? Заранее спасибо.
Нравится
Здравствуйте!
Уточните, пожалуйста, продукт и его версию.
А если фильтр убрать, выбирает нормально?
Дело именно в наложенном фильтре, или в Unprepare?
Фильтр работает нормально. Без Unprepare работает тоже нормально. Может ли это быть от частого запуска "edtResult.UnprepareDropDownList()"? Просто когда убрал строки edtResult.UnprepareDropDownList() из функции dlDataOnDatasetDataChange, отрабатывает без ошибок.
Может, дело в том, что у Вас dlDataOnDatasetDataChange(DataField) срабатывает при изменении любого поля, а не только поля «Тип», по которому фильтруется? А если добавить дополнительную проверку и делить Unprepare только когда действительно нужно?
Да, срабатывает не только когда фильтрую по данному полю. А как можно отловить изменение именно этого поля? Добавил в функцию function edtTypeOnEnter(Control) стало отрабатывать нормально, без ошибок, но хотелось бы узнать, как можно отловить изменение именно в dlDataOnDatasetDataChange(DataField)?
У Вас в функцию dlDataOnDatasetDataChange передаётся параметр DataField. Это и есть то поле, что поменялось. Смотрите у него значение Name.
function dlDataOnDatasetDataChange(DataField) { var DataFieldName = DataField.Name; switch (DataFieldName){ case ('TypeID'): edtResult.UnprepareDropDownList(); break; } }