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

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

  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 = 1 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

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK