Формы. Как сделать зависимые поля в форме (Страна, Город)

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

  1. Ставим у колонки поле Зависимые поля (dependentCols) списком через запятую (указываем те поля, которые должны обновляться при изменении данного поля).
  2. В процедуре Источника будет необязательный параметр @fields DictionaryParameter, который передает текущее состояние формы (он должен быть необязательный как в примере).  ВАЖНО! Он используется только в зависимых столбцах. В обычных элементах с выбором из списка не нужно его указывать.

Ведущий запрос (Страны). fields можно здесь не использовать в параметрах (если использовать, то по умолчанию ‘’).

CREATE PROCEDURE [dbo].[fm_user_country_dict]
  @username nvarchar(256)
  @itemID int
AS
BEGIN
    select 'Не выбрано' Text, 0 Value, 0 Selected
    union
    select name Text, id Value, 0 Selected from as_geo_regions where typeID = 1
    order by Text

END

Ведомый запрос (города). Важно соблюсти все нюансы использования fields+ искать и по id и по name через or как в примере.

CREATE PROCEDURE [dbo].[fm_user_country_dict]
  @username nvarchar(256)
  @itemID int
  @fields DictionaryParameter READONLY

AS
BEGIN
    declare @country nvarchar(128)
    select @country = Value from @fields where [key] = 'country'
    exec dbo.as_print @str = @country

        select 'Не выбрано' Text, 0 Value, 0 Selected
    union
    select name Text, id Value, 0 Selected from as_geo_regions where typeID = and
        (cast(parentID as nvarchar) = @country or isnull(@country, '') = '' or parentID in (select id from as_geo_regions where name = @country))
    order by Text
END
  1. Разметка в форме любая, можно использовать например такую:
    <label>Страна / город </label> {colcontrol-country} {colcontrol-city}
    
  2. В процедуре GetItem устанавливайте значения для обоих полей.
    isnull((select name from as_geo_regions
        where id = (select parentID from as_geo_regions where id = regionID)), 'Не указан') country,
    isnull((select name from as_geo_regions
        where id = regionID), 'Не указан') city 
  3. В итоге поля будут работать как зависимые.

Рабочий пример - https://demo.web-automation.ru/list/watch/zavisimye-polya---32

Примечание:

Зависимые столбцы работают не только для списковых элементов, но и для полей типа text и др.

Для этого указываем также зависимые поля и устанавливаем не для спискового значения хранимку значений, которая должна возвращать 1 строку с Text и Value:

  1. Text - устанавливает значение элемента.
  2. Value - если 0, то прячет элемент.

Пример:

CREATE PROCEDURE [dbo].[fm_user_email_dict]
   @username nvarchar(256),
   @itemID nvarchar(128),
   @fields DictionaryParameter READONLY --- если нужно сделать зависимые столбцы (в
                                            коллекции передаются состояние всех столбцов)
AS
BEGIN
        
        DECLARE @skype nvarchar(128)
        SELECT @skype = Value FROM @fields WHERE [Key] = 'skype'
       
        if(@skype<>'')BEGIN
            SELECT 'Есть скайп' Text, 1 Value, 0 Selected
        END else BEGIN
            SELECT '' Text, 0 Value, 0 Selected
        END
END

ВАЖНО. Скрытие видимости не будет действовать для списковых полей!

Примечание: 

Для поля типа select-search не будет работать как зависимое дочернее поле, но при этом может быть родительским полем.

Поля chosen и chosenMultiple могут быть как зависимые поля (как родительским, так и дочерним элементом). 

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом

Это быстрое внесение изменений

по ходу эксплуатации программы. Как создается функционал на платформе

Это простой удобный интерфейс

адаптация под мобильные устройства. Про юзабилити платформы

Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Сайт использует Cookie. Правила конфиденциальности OK