Когда Пользователь выбирает некоторую Запись таблицы, выбрав соответствующее значение из Списка, часто возникает необходимость автоматического обновления связанных данных из другой, дочерней Таблицы, размещенной во втором Списке (предполагается тип отношения "Один-ко-Многим"). Для реализации описанной функциональности вы можете использовать как локальные Таблицы, так и локальные и удаленные Представления.

Для локальных Таблиц. В списках (ListBox) для свойства RowSourceType устанавливается значение = 2 - Алиас, или = 6 - Поле, для значения свойства RowSource устанавливается имя требуемого Поля из локальной Таблицы, на основе которого построено Отношение в соответствующем объекте среды данных (Data Environment), при указании команды THISFORM.Refresh в программном коде События  InteractiveChange - обновляется дочерняя Таблица, а вместе с ней и Список. Во втором Списке, для дочерней таблицы, источник данных автоматически отбирает только привязанные Отношением Записи, которые и отражаются в Списке.

Для Представлений. Обновление  Списков Записей из Таблиц, связанных отношением типа "Один-ко-Многим", где для свойства RowSource указано Локальное или Удаленное Представление, несколько отличается от описанного выше варианта. Далее описывается некоторый пример, где для отображения связанных Таблиц используются Контролы: ListBox и Grid. Список основан на поле с именем cust_id из соответствующей Таблицы TESTDATA!Customer. В контроле Grid отображаются Ордера, связанные по данному полю cust_id, которое выбранно в первом Списке.

Сначала, в Дизайнере Представления создается параметризованное Представление для Ордеров (на базе Таблицы Orders). При создании Представления, для критерия отбора записей указывается один из Ключей (индексов) Таблицы, который приравнивается к некоторой переменной m.cCust_id.

Парапметризация Представления с использованием Переменной:

FoxProFilterOptions screenshot

Далее, при разработке формы, используйте следующие рекомендации. Используемое Представление не может быть загружено при начальной загрузке Формы, параметр Представления не определен. Для осуществления открытия Представления рекомендуется установить NoDataOnLoad, свойство  в значение=True(.T.), тем самым; Представление не заполняется до тех пор,пока не выполнена Функция  REQUERY( ), до того момента, пока Пользователь не выбрал значения Переменной, от которого зависит параметризация описанного Представления.

Для создания Списков, связанных Отношениями "Один-ко-Многим" для локальных и удаленных Представлений:

  1. Включите требуемую Таблицу и параметризованное Представление в объект Среда Данных Формы. 

  2. В системном окне Properties (Свойства) для Курсора Представления, установите NoDataOnLoad = True (.T.).

  3. Для дочернего Списка установите значение свойства RowSourceType =  6Поля, а для свойства RowSource определите имя поля, которое параметризует рассматриваемое Представление.

    В нашем примере: RowSource = customer.cust_id.

  4. Установите значение свойства RecordSource Контрола Grid = имя рассмотренного Представления.

  5. В Программном Коде события InteractiveChange Контрола ListBox, требуется разместить следующий фрагмент, который уточняет параметр Представления, которое далее Обновляется.

      CopyCode imageКопировать Код
     m.cCust_id = THIS.Value
    *assuming the name of the view is orders_view
    =REQUERY("orders_view")

Дополнительную информацию о Локальных и Удаленных Представлениях смотрите в разделе: Создание Представлений.

См. также