Добрый день!
Понадобилось реализовать такую задачу:
В DataControlы карточки добавить появляющуюся при появлении значения в поле кнопку(за лупой, если это LookupDataControl), нажатие на которую очистит это значение и после этого кнопка снова исчезнет.
Данную задачу реализовываю при помощи ActionMenu, привязывая ее к DataField.Buttons динамически в событии OnDatasetDataChange и затем при удалении значения поля делаю DataField.Buttons = System.EmptyValue.
Так вот, все работает нормально, если удаляю значение кнопкой Delete с клавиатуры, кнопка появляется и исчезает нормально, но если значение удалять из события ActionMenuItemOnExecute (Sender.DataField.Value = null), вываливается ошибка List index out of bounds(2).
В чем может быть проблема?
Заранее благодарен!

Нравится

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

Просто интересно, а чем Backspace не устраивал?

Вопрос к клиенту, наверное боятся мышь отпускать :wink:

Иван, реализуйте задачу немного иначе:
1. В функции dlDataOnDatasetDataChange пропишите логику скрытия amiActionMenuItem, например:

	if (FieldName == 'OwnerID') {
		if (IsEmptyValue (DataField.Value)){
	    amiActionMenuItem.IsVisible = false; 	
		}else{
		amiActionMenuItem.IsVisible = true;
		}
	}

2. В функцию обработки события OnExecute компонента amiActionMenuItem никаких изменений вносить не нужно.

Ошибка вызвана тем, что Вы находясь в уже вызванном обработчике события amiActionMenuItem, связанном с компонентом LookupDataField окна, пытаетесь сделать отвязку .

Спасибо Наталия, ситуация с ошибкой прояснилась.
Но проблема в том, что если сделать amiActionMenuItem.IsVisible = false, то он будет скрыт для всех DataField, которых очень много. А нужно это делать только для тех, в которых Value = null.

Вопрос решил обнулением Value по таймеру. Спасибо за наводку!

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