Как отобразить все данные в поле (поле со списком) в форме, когда источник строк поля со списком не включает это значение

Данные, ранее введенные в поле, не отображаются, если поле в форме является элементом управления combobox

Имейте форму, отображающую информацию о событии. Он включает в себя имя сотрудника, который его изначально создал. Источник строк поля со списком для этого элемента управления - это только список текущих сотрудников. Если исходный сотрудник, который настраивал событие, ушел (т. Е. Не в настоящее время), элемент управления показывает пустое поле при открытии формы для этой записи.

Я хочу знать, как отображать исторические данные (т.е. любые / все данные), но если пользователь хочет что-либо изменить, он получает только текущий (то есть обновленный) список, доступный им.

В элементе управления хранится идентификатор сотрудника, в поле со списком отображается имя сотрудника (связанное с таблицей сотрудников. Поэтому при попытке изменить параметры он говорит, что я не могу, поскольку связанный столбец скрыт.


person Jakeymus    schedule 04.01.2019    source источник


Ответы (1)


У вас не так много отличных вариантов.

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

Я могу придумать несколько предложений.

Сначала добавьте «активный» столбец персонала к отображению поля со списком. Затем, если пользователь изменяет или выбирает из поля со списком, вы можете предотвратить (или предупредить), что он выбирает несуществующего сотрудника. Это отобразит неактивный персонал, но теоретически позволит пользователям выбирать неактивный персонал - возможно, вы этого не захотите. (но вы можете предупредить или предотвратить в элементе управления перед обновлением, если хотите предотвратить это).

Другой способ - динамическая загрузка поля со списком на основе текущей записи. Другими словами, если форма, скажем, находится в «режиме добавления» или поле со списком пусто, вы загружаете поле со списком с помощью оператора выбора, который включает только StaffActive = True.

Вышеупомянутое может работать довольно хорошо, если вы ограничите свою «основную» форму одной записью (я обычно так и поступаю). Я обычно представляю форму поиска, а ЗАТЕМ всегда запускаю основную форму для ОДНОЙ записи.

Таким образом, в событиях загрузки форм вы можете проверить, установлен ли идентификатор столбца персонала, и, если он не активен, вы загружаете поле со списком со всеми сотрудниками.

Если в столбце есть активный член персонала, то в форме при загрузке вы устанавливаете sql поля со списком только для активных членов.

Этот подход «сложен», если вы разрешаете навигацию по записям. В этом случае вы должны поместить тестирование в текущее событие и установить таким образом sql поля со списком. Будем надеяться, что таблица со списком сотрудников «маленькая».

Третий способ заполнить поле со списком - использовать обратные вызовы. Это МАЛЕНЬКИЙ известный подход, и снова с текущим событием вы можете проверить, является ли идентификатор неактивным, и, таким образом, установить vatriable (вероятно, глобальный), который позволяет коду обратного вызова включать неактивный персонал.

Однако, если вы сохранили «id» в столбце записи о персонале, которой больше не существует, то вы мало что можете сделать. (Возможно, я попытаюсь повторно ввести удаленный персонал с правильными идентификаторами).

Так что неясно, удалена ли запись о персонале или у вас есть какой-то «активный» флаг. Если у вас есть активный флаг, вы можете «протестировать», является ли «id» персонала из поля со списком неактивным персоналом, а затем вставить правильный sql в источник данных поля со списком, который включает неактивный персонал.

Я полагаю, что из соображений производительности и некоторого уменьшения «мерцания» я бы, возможно, установил / отслеживал, что отображается в текущем поле со списком, и ТОЛЬКО обновлял поле со списком, если требуются статусные (неактивные) члены.

person Albert D. Kallal    schedule 04.01.2019
comment
Спасибо, да, это много ответов. Формы, содержащие комбо, открываются только как одна запись, поэтому я буду использовать ваш метод тестирования для пустого поля. Персонал, который больше не является текущим, не удаляется, но помечен как устаревший. И спасибо, что так ясно объяснили. Я следил за многими вашими сообщениями, поэтому, похоже, я на правильном пути со структурой данных. Ваше здоровье. - person Jakeymus; 04.01.2019