DetailsList контроль
Элемент управления, используемый для отображения набора данных.
Заметка
Полная документация и исходный код находятся в разделе Репозиторий компонентов кода на GitHub.
Description
Подробный список (DetailsList
) — это надежный способ отобразить информативную коллекцию элементов и позволить людям сортировать, группировать и фильтровать содержимое. Используйте DetailsList
, когда плотность информации критична.
Компонент кода DetailsList
позволяет использовать компонент Fluent UI DetailsList
из приложений на основе холста и пользовательских страниц.
- Может быть привязан к набору данных Dataverse или локальной коллекции.
- Поддерживает настраиваемые столбцы отдельно от метаданных столбцов, предоставленных исходным набором данных, для гибкости.
- Типы ячеек для ссылок, значков, развертывания/свертывания и вложенных текстовых ячеек.
- Поддержка разбиения на страницы.
- Поддержка сортировки либо с помощью сортировки Dataverse, либо с помощью настраиваемых свойств
SortBy
.
Свойства
Ключевые свойства
Свойство | Description |
---|---|
Items |
Набор данных, содержащий строки для отрисовки. Также отображается как Records . См. таблицу свойств элементов ниже. |
Columns |
Набор данных, содержащий метаданные параметров для столбцов. Если указан этот набор данных, он полностью заменит столбцы, представленные в наборе данных записей. См. таблицу свойств столбцов ниже. |
SelectionType |
Тип выбора (нет, один, несколько) |
PageSize |
Определяет, сколько записей загружать на страницу. |
PageNumber |
Выводит отображаемую текущую страницу. |
HasNextPage |
Выводит true, если есть следующая страница. |
HasPreviousPage |
Выводит true, если есть предыдущая страница. |
TotalRecords |
Выводит общее количество доступных записей. |
CurrentSortColumn |
Имя столбца, который будет отображаться как используемый в настоящее время для сортировки |
CurrentSortDirection |
Направление текущего используемого столбца сортировки |
Items
характеристики
Эти атрибуты должны быть доступны в источнике данных, чтобы активировать соответствующую функциональность. Формулу Power Fx AddColumns() можно использовать для добавления этих значений к исходному источнику данных.
Свойство | Description |
---|---|
RecordKey |
(необязательно) — уникальное имя ключевого столбца. Укажите это, если вы хотите, чтобы выбор сохранялся при обновлении записей, и когда вы хотите, чтобы EventRowKey содержал идентификатор вместо индекса строки после возникновения события OnChange . |
RecordCanSelect |
(необязательно) — имя столбца, содержащего значение boolean , определяющее, может ли быть выбрана строка. |
RecordSelected |
(необязательно) — имя столбца, содержащего значение boolean , определяющее, выбрана ли строка по умолчанию, и при установке InputEvent содержащее SetSelection . См. раздел о Set Selection ниже. |
Columns
характеристики
Свойство | Description |
---|---|
ColDisplayName |
(Обязательно) — указывает имя столбца для отображения в заголовке. |
ColName |
(Обязательно) — указывает фактическое имя поля столбца для отображения в коллекции элементов. |
ColWidth |
(Обязательно) — предоставляет абсолютную фиксированную ширину столбца в пикселях. |
ColCellType |
Тип ячейки для отрисовки. Возможные значения: expand , tag , indicatortag , image , clickableimage , link . Для получения дополнительных сведений см. следующие разделы. |
ColHorizontalAlign |
Выравнивание содержимого ячейки, если ColCellType имеет тип image или clickableimage . |
ColVerticalAlign |
Выравнивание содержимого ячейки, если ColCellType имеет тип image или clickableimage . |
ColMultiLine |
True, когда текст в текстовых ячейках должен переноситься, если он слишком длинный, чтобы соответствовать доступной ширине. |
ColResizable |
True, если ширина заголовка столбца должна изменяться. |
ColSortable |
True, если столбец должен поддерживать возможность сортировки. Если набор данных поддерживает автоматическую сортировку через прямое соединение Dataverse, данные будут автоматически отсортированы. В противном случае выходные данные SortEventColumn и SortEventDirection будут установлены и должны использоваться в выражении привязки записей Power FX. |
ColSortBy |
Имя столбца для предоставления событию OnChange при сортировке столбца. Например, если вы сортируете столбцы даты, вы хотите сортировать по фактическому значению даты, а не по форматированному тексту, отображаемому в столбце. |
ColIsBold |
True, если данные ячейки данных должны быть выделены полужирным шрифтом |
ColTagColorColumn |
Если тип ячейки — тег, установите шестнадцатеричный цвет фона текстового тега. Не может быть установлено значение transparent . Если тип ячейки не является тегом, установите шестнадцатеричный цвет для использования в качестве ячейки тега индикаторного круга. Если текстовое значение пусто, тег не отображается. |
ColTagBorderColorColumn |
Установите шестнадцатеричный цвет для использования в качестве цвета границы текстового тега. Не может быть установлено значение transparent . |
ColHeaderPaddingLeft |
Добавляет отступы к тексту заголовка столбца (в пикселях) |
ColShowAsSubTextOf |
Если задать для этого параметра имя другого столбца, этот столбец станет дочерним по отношению к данному столбцу. См. ниже в столбцах вложенного текста. |
ColPaddingLeft |
Добавляет отступ слева от дочерней ячейки (в пикселях) |
ColPaddingTop |
Добавляет отступ сверху от дочерней ячейки (в пикселях) |
ColLabelAbove |
Перемещает метку над значением дочерней ячейки, если она отображается в виде столбца вложенного текста. |
ColMultiValueDelimiter |
Объединяет значения массива с несколькими значениями вместе с этим разделителем. См. ниже под столбцами с несколькими значениями. |
ColFirstMultiValueBold |
При отображении многозначного значения массива первый элемент выделяется жирным шрифтом. |
ColInlineLabel |
Если установлено строковое значение, оно используется для отображения метки внутри значения ячейки, которое может отличаться от имени столбца. например ![]() |
ColHideWhenBlank |
При значении true любая встроенная метка и отступы ячейки будут скрыты, если значение ячейки пустое. |
ColSubTextRow |
При отображении нескольких ячеек в ячейке вложенного текста установите на индекс строки. Ноль указывает основную строку содержимого ячейки. |
ColAriaTextColumn |
Столбец, содержащий описание Aria для ячеек (например, ячеек значков). |
ColCellActionDisabledColumn |
Столбец, который содержит логический флаг, чтобы контролировать, отключено ли действие ячейки (например, ячейки значков). |
ColImageWidth |
Размер значка/изображения в пикселях. |
ColImagePadding |
Отступ вокруг ячейки значка/изображения. |
ColRowHeader |
Определяет столбец для отображения большего размера, чем другие ячейки (14 пикселей, а не 12 пикселей). Обычно для каждого набора столбцов будет только один заголовок строки. |
Свойства стиля
Свойство | Description |
---|---|
Theme |
Используемая тема Fluent UI JSON, созданная и экспортированная из Конструктора тем Fluent UI. Сведения о порядке настройки см. в разделе темы. |
Compact |
True, когда следует использовать компактный стиль |
AlternateRowColor |
Шестнадцатеричное значение цвета строки для использования в чередующихся строках. |
SelectionAlwaysVisible |
Должны ли кнопки-переключатели выбора всегда быть видны, а не только при наведении курсора на строку. |
AccessibilityLabel |
Метка для добавления к описанию таблицы Aria |
Свойства событий
Свойство | Description |
---|---|
RaiseOnRowSelectionChangeEvent |
Событие OnChange возникает при выборе или отмене выбора строки. (см. ниже) |
InputEvent |
Одно или несколько входных событий (которые можно объединить вместе с помощью конкатенации строк). Возможные значения: SetFocus , SetFocusOnRow , SetFocusOnHeader , ClearSelection , SetSelection . За ним должен следовать элемент случайной строки, чтобы гарантировать запуск события. События могут быть объединены, например SetFocusClearSelection очистит и установит фокус одновременно. SetFocusOnRowSetSelection установит фокус на строке и одновременно установит выделение. |
EventName |
Выходное событие при срабатывании OnChange . Возможные значения — Sort , CellAction , OnRowSelectionChange |
EventColumn |
Имя поля столбца выходного события, используемое при вызове CellAction |
EventRowKey |
Столбец выходного события, который содержит либо индекс строки, для которой было вызвано событие, либо ключ строки, если установлено свойство RecordKey . |
SortEventColumn |
Имя столбца, вызвавшего событие сортировки OnChange |
SortEventDirection |
Направление сортировки, вызвавшего событие сортировки OnChange |
Базовое использование
Чтобы определить, какие столбцы отображаются в DetailsList
, настройте следующие свойства DetailsList
:
Поля. Добавьте нужные поля, выбрав пункт «Редактировать» во всплывающем меню элементов управления справа (тут используется тот же интерфейс для изменения предопределенных карточек данных).
Колонны. Обеспечьте конкретное сопоставление между столбцами и полями в свойстве
Columns
.
Пример:
Сопоставление с системной таблицей Учетные записи Dataverse, по следующей формуле:
Table(
{
ColName: "name",
ColDisplayName: "Name",
ColWidth: 200,
ColSortable: true,
ColIsBold: true,
ColResizable: true
},{
ColName: "address1_city",
ColDisplayName: "City:",
ColShowAsSubTextOf: "name"
},{
ColName: "address1_country",
ColDisplayName: "Country:",
ColShowAsSubTextOf: "name"
},{
ColName: "telephone1",
ColDisplayName: "Telephone",
ColWidth: 100,
ColSortable: true,
ColResizable: true
},{
ColName: "primarycontactid",
ColDisplayName: "Primary Contact",
ColWidth: 200,
ColSortable: true,
ColSortBy: "_primarycontactid_value",
ColResizable: true,
ColCellType: "link"
}
)
Вложенные текстовые столбцы
Свойство столбца ColShowAsSubTextOf
определяет столбец, отображаемый под значением в другом столбце. Это можно использовать для отображения вторичной информации и расширяемого контента (см. ниже).
Если у вас есть коллекция, определенная как:
ClearCollect(colAccounts,
{id:"1",name:"Contoso",city:"Redmond",country:"U.S.",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",expand:false},
{id:"2",name:"Litware, Inc",city:"Dallas",country:"U.S.",description:"Donec vel pellentesque turpis.",expand:false});
Вы можете определить столбцы как:
Table(
{
ColName: "name",
ColDisplayName: "Account Name",
ColWidth: Self.Width-100,
ColIsBold:true
},
{
ColName: "city",
ColDisplayName: "City:",
ColShowAsSubTextOf:"name",
ColLabelAbove:false,
ColIsBold:true,
ColSubTextRow: 1
},
{
ColName: "country",
ColDisplayName: "Country:",
ColShowAsSubTextOf:"name",
ColLabelAbove:false,
ColIsBold:true,
ColSubTextRow: 1
},
{
ColName: "description",
ColDisplayName: "",
ColShowAsSubTextOf:"name",
ColLabelAbove:false,
ColIsBold:false,
ColSubTextRow: 2
}
)
В результате получится таблица следующего вида:
Типы ячеек
Свойство столбца ColCellType
принимает следующие значения: expand
, tag
, image
, indicatortag
, clickableimage
, link
Развернуть (свернуть)
Если для строк «Вложенный текст» требуется значок развертывания/свертывания, можно добавить дополнительный столбец к столбцу набора данных и определение столбца ColCellType
устанавливает expand
также:
{ColName:"expand",ColDisplayName:"",ColWidth:32,ColResponsive:false, ColRightAligned:true, ColCellType:"expand"}
Предполагая, что свойство RecordKey
установлено в столбце index
, событие OnChange
может содержать следующее, чтобы развернуть/свернуть строки:
If(Self.EventName="CellAction" && Self.EventColumn="expand",
With(LookUp(colExpand,index=Self.EventRowKey) As Row,
Patch(colExpand,Row,{expand:!Row.expand})
)
);
Это ищет строку, в которой было вызвано действие ячейки при использовании индекса (если RecordKey
не установлен, то EventRowKey
будет содержать номер строки), а затем переключает значение развертывания.
Это даст следующий результат:
Тег и тег индикатора
Используя тип ячейки tag
или indicatortag
, вы можете создавать встроенные цветные теги для отображения содержимого ячейки.
tag
- Появится поле тега с цветным фоном и рамкой.tagindicator
- Показывает поле тега с цветным круглым индикатором
Цвета могут варьироваться в зависимости от строки, поэтому набор данных метаданных столбца просто предоставляет имена столбцов, содержащих цвета для тегов.
Рассмотрим набор данных:
ClearCollect(
colAccounts,
{
name: "Contoso",
city: "Redmond",
country: "U.S.",
TagColor: "rgb(0, 183, 195)",
TagBorderColor: "rgb(0,137,147)"
},
{
name: "Litware, Inc",
city: "Dallas",
country: "U.S.",
TagColor: "rgb(255, 140, 0)",
TagBorderColor: "rgb(194,107,0)"
}
);
Затем вы можете добавить метаданные столбца, чтобы добавить два столбца, один из которых отображается как тег, а другой как tagindicator, каждый из которых использует столбцы TagColor и TagBorderColor для определения цветов:
{
ColName: "country",
ColDisplayName: "Country",
ColCellType:"tag",
ColWidth: 60,
ColTagColorColumn: "TagColor",
ColTagBorderColorColumn: "TagBorderColor"
},
{
ColName: "country",
ColDisplayName: "Country",
ColCellType:"indicatortag",
ColWidth: 60,
ColTagColorColumn: "TagColor",
ColTagBorderColorColumn: "TagBorderColor"
}
Это даст следующий результат:
Изображение и изображение, доступное для щелчка
Используя тип ячейки image
или clickableimage
, вы можете настроить встроенные изображения, которые можно дополнительно выбрать для установки действия OnChange
.
Содержимое изображения может быть определено с помощью префикса:
https:
Ссылка на внешнее изображение. например, https://via.placeholder.com/100x70icon:
Используя один из Иконки пользовательского интерфейса Fluent например,icon:SkypeCircleCheck
data:
Использование встроенных данных изображения SVG: например,data:image/svg+xml;utf8, %3Csvg%20%20viewBox%3D%270%200%2020...
Если изображение имеет тип clickableimage
, событие OnChange
сработает при выборе значка, с EvenName
из CellAction
, EventColumn
предоставляет имя столбца изображения, а EventRowKey
является RecordKey
строки (если не задан RecordKey
, то EventRowKey
будет содержать номер строки).
например, рассмотрим данные строки:
{
id: "1",
name: "Contoso",
city: "Redmond",
country: "U.S.",
ImageColor: "rgb(0, 183, 195)",
externalimage: "https://via.placeholder.com/100x70",
iconimage: "icon:SkypeCircleCheck"
},
{
id: "2",
name: "Litware, Inc",
city: "Dallas",
country: "U.S.",
ImageColor: "rgb(255, 140, 0)",
externalimage: "https://via.placeholder.com/100x70",
iconimage: "icon:SkypeCircleCheck"
}
и метаданные столбца:
{
ColName: "externalimage",
ColDisplayName: "Image",
ColCellType:"image",
ColWidth: 60,
ColImageWidth: 60,
ColImagePadding: 8,
ColVerticalAlign: "Top"
},
{
ColName: "iconimage",
ColDisplayName: "Clickable Image",
ColCellType:"clickableimage",
ColWidth: 60,
ColImageWidth: 60,
ColImagePadding: 8,
ColVerticalAlign: "Top"
}
Это даст результат:
Для столбца clickableimage
событие OnChange
может затем обрабатываться, когда пользователь выбирает (мышью или клавиатурой) значок (при условии, что он не отключен), используя:
If(Self.EventName="CellAction",
Notify("CellAction " & Self.EventColumn & " " & Self.EventRowKey)
)
EventRowKey
будет заполнен значением столбца, определенным как свойство RecordKey
.
Ссылки.
Столбцы могут отображаться как ссылки, которые будут вызывать событие OnChange при выборе ссылки аналогично тому, как работают интерактивные изображения, описанные выше.
Метаданные столбца для ссылки настроены следующим образом:
{
ColName: "name",
ColDisplayName: "Account Name",
ColWidth: 150,
ColIsBold:true,
ColCellType: "link"
}
Это приведет к следующему отображению содержимого ячейки:
Событие OnChange
снова запускается при нажатии на ссылку, при этом EventColumn
является именем столбца, содержащего ссылку, и EventRowKey
заполняется значением столбца, определенным как свойство RecordKey
.
Многозначные столбцы
Если значение столбца может иметь несколько значений путем установки его в таблицу/коллекцию. Это затем отобразит значения как несколько значений ячеек. например:
{
id: "1",
name: "Contoso",
tags:["#PowerApps","#PowerPlatform"]
},
Тогда метаданные столбца могут быть:
{
ColName: "tags",
ColDisplayName: "Tags",
ColWidth: 250,
ColFirstMultiValueBold :true,
ColMultiValueDelimiter:" "
}
Это приведет к таблице, показывающей:
Поведение
События сортировки
Столбец определяется как сортируемый путем установки для свойства ColSortable
значения true. Если в столбце отображается текстовое значение, которое отличается от требуемого порядка сортировки (например, отформатированная дата или столбец состояния), то можно указать другой столбец сортировки с помощью свойства ColSortBy
.
Затем сортировка выполняется двумя способами:
- Автоматически при подключении к источнику данных Dataverse.
- Вручную при использовании коллекций.
Автоматическая сортировка
Когда набор данных элементов является родным набором данных Dataverse, он будет автоматически отсортирован, если столбец помечен как сортируемый. Если были внесены какие-либо изменения в форму коллекции Dataverse с помощью AddColumn
или путем сортировки данных в коллекции, автоматическая сортировка больше не будет работать, и необходимо реализовать ручную сортировку.
Сортировка вручную
Ручная сортировка поддерживается за пределами компонента, чтобы обеспечить поддержку настраиваемого соединителя и сортировку локальной коллекции, когда она не подключена к подключению Dataverse. Столбцы могут быть определены как сортируемые или нет. Когда выбрана сортировка по столбцу, событие OnChange
возникает, предоставляя столбец и направление. Затем приложение должно использовать эти значения, чтобы изменить связанную коллекцию на таблицу для обновления отсортированными записями.
В коллекции столбцов добавьте сортируемый логический столбец
Добавьте имя сортируемого столбца в свойство
Columns.ColSortable
Внутри события
OnChange
таблицы добавьте код:If(Self.EventName="Sort", UpdateContext({ ctxSortCol:Self.SortEventColumn, ctxSortAsc:If(Self.SortEventDirection='PowerCAT.FluentDetailsList.SortEventDirection'.Ascending,true,false) }) );
Установите свойство
Sort Column
в значениеctxSortCol
Установите для свойства
Sort Direction
значение:If(ctxSortAsc, 'PowerCAT.FluentDetailsList.CurrentSortDirection'.Ascending, 'PowerCAT.FluentDetailsList.CurrentSortDirection'.Descending)
Настройте коллекцию входных элементов для сортировки с использованием переменных контекста, установленных выше:
SortByColumns(colData,ctxSortCol,If(ctxSortAsc,SortOrder.Ascending,SortOrder.Descending))
Когда событие OnChange запускается после того, как пользователь выбирает заголовок столбца, чтобы изменить сортировку, переменные контекста сортировки обновляются с использованием предоставленной новой информации о сортировке, что приводит к повторной сортировке входного набора данных и соответствующему обновлению таблицы.
Разбиение на страницы
Разбиение на страницы обрабатывается внутри компонента, однако кнопки для перемещения назад/вперед должны быть созданы хост-приложением, а события должны отправляться компоненту.
Следующие свойства используются для управления разбиением на страницы:
PageSize
- Определяет, сколько записей следует загружать на страницу.PageNumber
- Выводит текущую отображаемую страницу.HasNextPage
- Выводит true, если есть следующая страница.HasPreviousPage
- Выводит true, если предыдущая страница есть.TotalRecords
- Выводит общее количество доступных записей.
Кнопки разбиения на страницы могут быть определены следующим образом:
- Загрузить первую страницу
OnSelect
:UpdateContext({ctxGridEvent:"LoadFirstPage" & Text(Rand())})
DisplayMode
:If(grid.HasPreviousPage,DisplayMode.Edit,DisplayMode.Disabled)
- Загрузить предыдущую страницу
OnSelect
:UpdateContext({ctxGridEvent:"LoadPreviousPage" & Text(Rand())})
DisplayMode
:If(grid.HasPreviousPage,DisplayMode.Edit,DisplayMode.Disabled)
- Загрузить следующую страницу
OnSelect
:UpdateContext({ctxGridEvent:"LoadNextPage" & Text(Rand())})
DisplayMode
:If(grid.HasNextPage,DisplayMode.Edit,DisplayMode.Disabled)
Метка количества записей может быть установлена в виде выражения, подобного следующему:
grid.TotalRecords & " record(s) " & Text(CountRows(grid.SelectedItems)+0) & " selected"
Показать верхнюю часть следующей страницы
Это реализуется с помощью события "SetFocusOnRow". Если бы у вас было свойство InputEvent, привязанное к ctxGridEvent
, в свойстве OnSelect кнопки следующей страницы вы бы использовали: UpdateContext({ctxGridEvent:"LoadNextPageSetFocusOnRow" & Text(Rand())});
Входные события
Для свойства InputEvent
можно задать одно из следующих значений:
SetFocus
- Устанавливает фокус на первую строку сеткиClearSelection
- Отменяет любой выбор и возвращается к выбору по умолчанию.SetSelection
- Устанавливает выбор, как определеноRowSelected
столбец.LoadNextPage
- Загружает следующую страницу, если она естьLoadPreviousPage
- Загружает предыдущую страницу, если она естьLoadFirstPage
- Загружает первую страницу
Чтобы гарантировать, что входное событие будет выбрано, оно должно быть дополнено случайным суффиксом. например, SetSelection" & Text(Rand())
Дополнительные сведения см. ниже.
Выбранные элементы и действия со строками
Компонент поддерживает режимы выбора Один, Несколько или Нет.
При выборе элементов свойства SelectedItems
и Selected
обновляются.
SelectedItems
- Если таблица находится в режиме множественного выбора, она будет содержать одну или несколько записей из коллекции элементов.Selected
- Если таблица находится в режиме одиночного выбора, она будет содержать выбранные записи.
Когда пользователь вызывает действие строки, либо двойным щелчком, либо нажатием клавиши ввода, либо выбранной строки, вызывается событие OnSelect
. Свойство Selected
будет содержать ссылку на запись, которая была вызвана. Это событие можно использовать для отображения подробной записи или перехода к другому экрану.
Если свойство RaiseOnRowSelectionChangeEvent
включено, когда выбранные строки изменены, событие OnChange
вызывается с EventName
со значением OnRowSelectionChange
. Если приложению необходимо реагировать на выбор одной строки, а не на двойной щелчок строки, событие OnChange
может обнаружить это с помощью кода, аналогичного следующему:
If(
Self.EventName = "OnRowSelectionChange",
If(!IsBlank(Self.EventRowKey),
// Row Selected
)
);
Очистка текущих выбранных элементов
Для очистки выбранных записей необходимо установить свойство InputEvent
на строку, начинающеюся с
например
UpdateContext({ctxTableEvent:"ClearSelection"&Text(Rand())})
Контекстная переменная ctxTableEvent
затем может быть привязана к свойству InputEvent
.
Задание выбора строк
Если существует сценарий, в котором определенный набор записей должен быть выбран программно, свойство InputEvent
может быть установлено на SetSelection
или SetFocusOnRowSetSelection
в сочетании с установкой свойства RecordSelected
в записи.
например, если бы у вас был следующий набор данных:
{RecordKey:1, RecordSelected:true, name:"Row1"}
Чтобы выбрать и выбрать первую строку, вы можете установить InputEvent
на "SetFocusOnRowSetSelection"&Text(Rand())
или "SetSelection"&Text(Rand())
Настройка поведения «При изменении»
Добавьте и измените приведенную ниже формулу в свойстве компонента OnChange
для настройки определенных действий на основе значения EventName
, которое предоставляется компонентом:
- Инициировать события, когда пользователь изменяет выбранную строку: Включите свойство Вызвать событие OnRowSelectionChange в компоненте.
- Настроить поведение ссылки: Добавьте столбцы, для которых значение ColCellType установлено как ссылка.
/* Runs when selected row changes and control property 'Raise OnRowSelection event' is true */
If( Self.EventName = "OnRowSelectionChange",
Notify( "Row Select " & Self.EventRowKey )
);
/* Runs when a user selects a column with ColCellType set to 'link' */
If( Self.EventName = "CellAction",
Notify( "Open Link " & Self.EventColumn & " " & Self.EventRowKey )
)
Ограничения
Этот компонент кода можно использовать только в приложениях на основе холста и настраиваемых страницах.