Другое

Power Apps: Ссылка на значения таблицы для выбора по умолчанию в выпадающем списке

Узнайте, как ссылаться на значения по индексу в свойстве DefaultSelectedItem выпадающих списков Power Apps. Узнайте правильный синтаксис с использованием свойства Value и функции Index для динамической установки выбранных по умолчанию значений. Полное руководство с примерами.

Как сослаться на значение в одноколоночной таблице для свойства defaultSelectedItem элемента выпадающего списка?

Я работаю с современным элементом выпадающего списка в своем приложении для навигации между экранами. Я сохранил элементы меню в переменной:

formMenu = ["Home", "Screen1", "Screen2"]

Мне нужно установить свойство defaultSelectedItem, чтобы отображать заголовок текущего активного экрана. Хотя я могу использовать First(formMenu) и Last(formMenu) для доступа к первым и последним значениям, мне необходимо сослаться на значение в середине таблицы.

Как можно сослаться на конкретное значение по его индексу в этой одноколоночной таблице? Я пробовал использовать нотацию в стиле массива, например formMenu[1], но это не работает в данном контексте.

Какой правильный синтаксис для доступа к значениям по позиции в одноколоночной таблице для использования в свойстве defaultSelectedItem элемента выпадающего списка?

Вы можете сослаться на значение в таблице с одним столбцом для свойства DefaultSelectedItem выпадающего элемента управления, используя синтаксис индексации со свойством Value, например formMenu.Value[1] или с помощью функции LookUp для поиска значений по позиции. Power Apps не поддерживает традиционную нотацию массивов, такую как formMenu[1], но вы можете получить доступ к элементам по индексу, используя свойство Value, за которым следует желаемый номер позиции.

Содержание

Основы индексации таблиц в Power Apps

Power Apps рассматривает массивы как таблицы, и хотя традиционные языки программирования используют индексацию с нулевым значением в квадратных скобках, например array[0], в Power Apps требуется другой подход. Когда вы создаете переменную, такую как formMenu = ["Home", "Screen1", "Screen2"], Power Apps преобразует ее в таблицу с одним столбцом, где каждый элемент массива становится строкой в таблице.

Ключевое понимание заключается в том, что Power Apps не поддерживает прямую индексацию в стиле массива с квадратными скобками. Вместо этого вам нужно использовать специфические для таблицы свойства и функции для доступа к значениям по их позиции в таблице. Эта разница часто сбивает с толку разработчиков, accustomed к традиционным языкам программирования.

Важное замечание: Переменная formMenu создает таблицу с именем столбца по умолчанию (обычно “Value”), и вам необходимо правильно ссылаться на этот столбец для доступа к элементам по индексу.

Доступ к значениям по индексу

Для доступа к значениям по индексу в вашей таблице с одним столбцом у вас есть несколько вариантов:

Использование свойства Value с индексом

Наиболее прямой подход - использовать свойство Value, за которым следует номер индекса. Например:

  • formMenu.Value[1] возвращает первое значение (“Home”)
  • formMenu.Value[2] возвращает второе значение (“Screen1”)
  • formMenu.Value[3] возвращает третье значение (“Screen2”)

Использование функции Index

Вы также можете использовать функцию Index, которая обеспечивает больше контроля:

powerapps
Index(formMenu, 1) // Возвращает первое значение
Index(formMenu, 2) // Возвращает второе значение
Index(formMenu, 3) // Возвращает третье значение

Использование LookUp с позицией

Другой подход - использовать LookUp для поиска элементов по их позиции:

powerapps
LookUp(formMenu, true, Index(formMenu, 2))

Установка свойства DefaultSelectedItem

Как только вы можете получать доступ к значениям по индексу, установка свойства DefaultSelectedItem становится простой. Свойство DefaultSelectedItem ожидает запись из таблицы Items, которая соответствует тому, что должно быть выбрано по умолчанию.

Для выпадающих элементов управления с одиночным выбором

powerapps
DefaultSelectedItems: Index(formMenu, 2)

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

powerapps
DefaultSelectedItems: [Index(formMenu, 1), Index(formMenu, 3)]

Динамический выбор на основе текущего экрана

Для установки элемента по умолчанию на основе имени текущего экрана:

powerapps
DefaultSelectedItems: LookUp(formMenu, Value = CurrentScreenName)

Где CurrentScreenName - это переменная, содержащая имя текущего активного экрана.

Альтернативные подходы

Когда прямая индексация не работает или вам нужна большая гибкость, рассмотрите эти альтернативы:

Использование столбца с порядковым номером

Добавьте столбец с порядковым номером в вашу таблицу и ссылайтесь на него:

powerapps
// Предполагается, что у вас есть столбец "Seq" с номерами
LookUp(formMenu, Seq = 2)

Использование функций FirstN и Last

powerapps
// Получение второго элемента путем взятия первых двух и затем последнего
Last(FirstN(formMenu, 2))

Использование Filter с логикой позиции

powerapps
// Более сложный, но гибкий подход
Filter(formMenu, true, Index(formMenu, 2))

Практические примеры

Вот практические примеры для разных сценариев:

Пример 1: Базовая индексация

powerapps
// Установка переменной formMenu
formMenu: ["Home", "Screen1", "Screen2", "Settings"]

// Установка по умолчанию второго элемента в выпадающем списке
DefaultSelectedItems: formMenu.Value[2] // Возвращает "Screen1"

Пример 2: Выбор на основе текущего экрана

powerapps
// Получение имени текущего экрана
CurrentScreen: Last(App.ActiveScreen).Name

// Установка выбора по умолчанию
DefaultSelectedItems: LookUp(formMenu, Value = CurrentScreen)

Пример 3: Условная индексация

powerapps
// Выбор разных элементов на основе роли пользователя
If(
    User().Role = "Admin",
    formMenu.Value[4], // "Settings" для администраторов
    formMenu.Value[2]  // "Screen1" для остальных
)

Пример 4: Динамическое меню с индексацией

powerapps
// Создание меню с динамическим содержимым
formMenu: ["Home", If(User().Role = "Admin", "AdminPanel", "UserPanel"), "Settings"]

// Доступ на основе позиции
DefaultSelectedItems: formMenu.Value[2]

Распространенные проблемы и решения

Проблема: Ошибка “Name isn’t defined. Value isn’t recognized”

Эта ошибка возникает, когда Power Apps не может найти столбец Value. Убедитесь, что ваша таблица имеет правильно определенный столбец Value.

Решение: Явно укажите имя столбца:

powerapps
DefaultSelectedItems: LookUp(formMenu, true, Index(formMenu, 2))

Проблема: Индекс вне диапазона

Доступ к индексу, который не существует, вызывает ошибки.

Решение: Добавьте проверку границ:

powerapps
If(
    CountRows(formMenu) >= 2,
    formMenu.Value[2],
    formMenu.Value[1]
)

Проблема: Ограничения современных элементов управления

Современные выпадающие элементы управления ведут себя иначе, чем традиционные выпадающие элементы управления.

Решение: Используйте специфические свойства для современного элемента управления:

powerapps
// Для современных выпадающих элементов управления
DefaultSelectedItems: ThisItem.'Approval Status'.Value

Проблема: Таблицы с несколькими столбцами

Если ваша таблица имеет несколько столбцов, вам нужно указать, какой столбец использовать.

Решение: Используйте конкретный столбец в вашем поиске:

powerapps
DefaultSelectedItems: LookUp(formMenu, Value = "Screen1")

Источники

  1. Drop down control in Power Apps - Microsoft Learn
  2. How to reference value in a single column table? - Stack Overflow
  3. Power Apps Dropdown - Modern Controls - Matthew Devaney
  4. Using the one list as a dropdown in another list to update the fields - Reddit
  5. Get 1 item in an array in Power Apps - SharePains

Заключение

Для ссылки на значения по индексу в свойствах DefaultSelectedItem выпадающих элементов управления в Power Apps используйте свойство Value с нотацией индекса, например formMenu.Value[2] для второго элемента, или функцию Index, например Index(formMenu, 2). В отличие от традиционных языков программирования, Power Apps не поддерживает прямую нотацию квадратных скобок для массивов, но рассматривает их как таблицы со столбцом Value.

Для динамического выбора на основе текущего экрана или условий объединяйте эти методы индексации с функциями LookUp. Всегда обрабатывайте крайние случаи, такие как пустые таблицы или индексы вне диапазона, чтобы предотвратить ошибки времени выполнения в вашем приложении.

Помните, что современные выпадающие элементы управления могут иметь немного другое поведение, чем традиционные выпадающие элементы, поэтому тщательно тестируйте вашу реализацию с использованием конкретного типа элемента управления, который вы используете.

Авторы
Проверено модерацией
Модерация