Перейти к содержанию

Итоги

Контрол TreeList позволяет вычислять общие итоги по колонкам. Общие итоги — это агрегатные функции, вычисляемые по всем строкам. Чтобы правильно вычислять общие итоги, контролу необходим одновременный доступ ко всем строкам.

Примечание

Установите свойство AllowDynamicDataLoading в false, чтобы отключить динамическую загрузку данных и обеспечить контролу TreeList одновременный доступ ко всем строкам.

treelist-summaries

Основные возможности вычисления итогов:

  • Встроенные функции итогов: Sum, Min, Max, Count и Average.
  • Управление во время работы приложения — пользователи могут щёлкнуть кнопку Σ в ячейке нижней панели, чтобы добавить итоги или открыть диалог Summary Editor для расширенных операций с итогами.
  • Несколько итогов на колонку — каждая колонка может отображать несколько итогов, вычисленных по значениям этой колонки.
  • Итоги между колонками — можно вычислить итог по одной колонке и отобразить его в другой.
  • Пользовательские итоги — можно обработать событие CustomSummary, чтобы вычислить собственную агрегатную функцию по своей логике.

Включение общих итогов

Общие итоги отображаются в нижней панели контрола.

Установите свойство ShowTotalSummaries в true, чтобы отобразить панель итогов и тем самым включить вычисление общих итогов. Панель итогов отображается в нижней части TreeListControl, под всеми строками. Изначально эта панель скрыта.

<mxtl:TreeListControl x:Name="treeList" ShowTotalSummaries="True" AllowDynamicDataLoading="False">...</mxtl:TreeListControl>

Панель итогов содержит ячейки итогов для всех колонок. Если включена настройка итогов пользователем (по умолчанию), эти ячейки содержат кнопку Σ, которая открывает меню итогов и редактор итогов.

treelist-summaries-sigma-button

Связанный API

  • ShowTotalSummaries — возвращает или задаёт, отображается ли панель общих итогов и включено ли вычисление общих итогов.
  • TotalSummaryPanelMinHeight — возвращает или задаёт минимальную высоту панели общих итогов.

Определение общих итогов

Используйте коллекцию TotalSummaries для определения общих итогов. Элементы этой коллекции — экземпляры класса SummaryItem. Каждый объект SummaryItem задаёт поле для вычисления итога, тип итога, колонку, в которой отображается результат, и другие параметры.

xmlns:mxdc="clr-namespace:Eremex.AvaloniaUI.Controls.DataControl;assembly=Eremex.Avalonia.Controls"

<mxtl:TreeListControl x:Name="treeList" ShowTotalSummaries="True" AllowDynamicDataLoading="False">
    <mxtl:TreeListControl.TotalSummaries>
        <mxdc:SummaryItem FieldName="Name" SummaryType="Count" />
        <mxdc:SummaryItem FieldName="Utilization" SummaryType="Average" ShowInColumn="PowerConsumption" />
        <mxdc:SummaryItem FieldName="Utilization" SummaryType="Max" />
        <mxdc:SummaryItem FieldName="MaintenanceCost" SummaryType="Min" />
        <mxdc:SummaryItem FieldName="MaintenanceCost" SummaryType="Max" />
        <mxdc:SummaryItem FieldName="PowerConsumption" SummaryType="Sum" />
    </mxtl:TreeListControl.TotalSummaries>
</mxtl:TreeListControl>

Связанный API

  • TotalSummaries — предоставляет доступ к коллекции элементов итогов (объектов SummaryItem), определяющих общие итоги.
  • SummaryItem.FieldName — возвращает или задаёт имя поля данных, значения которого используются для вычисления итога.
  • SummaryItem.Name — возвращает или задаёт имя элемента итога, по которому его можно идентифицировать. По имени можно получить элементы итогов из коллекции TotalSummaries.
  • SummaryItem.Tag — возвращает или задаёт пользовательские данные, связанные с этим элементом SummaryItem.
  • SummaryItem.ShowInColumn — возвращает или задаёт имя поля колонки, которая отображает значение итога. Если свойство не задано, итог отображается в колонке, привязанной к FieldName.
  • SummaryItem.SummaryType — возвращает или задаёт тип агрегатной функции (Sum, Min, Max, Count или Average).
  • SummaryItem.Label — возвращает или задаёт пользовательскую подпись, отображаемую вместо подписи итога по умолчанию. Подпись по умолчанию показывает название функции итога. Если итог отображается в другой колонке (см. ShowInColumn), подпись также показывает заголовок колонки, привязанной к SummaryItem.FieldName.

    treelist-summaries-labels

Настройка итогов пользователем

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

treelist-summaries-summary-menu

С помощью этого меню пользователи могут:

  • Добавлять и удалять итоги, устанавливая и снимая флажки рядом с функциями итогов.

    treelist-summaries-summary-menu-multiple-items

  • Выбрать Customize, чтобы открыть диалог Summary Editor.

    treelist-summaries-summary-editor

    На вкладке Summaries этого диалога пользователи могут создавать итоги между колонками (итоги, вычисленные по одной колонке, но отображаемые в другой).

    На вкладке Order можно изменить порядок отображения существующих итогов.

    treelist-summaries-summary-editor-order-tab

Связанный API

  • AllowEditingTotalSummaries — возвращает или задаёт, могут ли пользователи редактировать общие итоги.

    Это свойство влияет только на возможности пользователей изменять итоги и не влияет на вычисления итогов, выполняемые в коде.

Пользовательские итоги

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

Чтобы добавить пользовательский итог, выполните следующие действия:

  • Создайте объект SummaryItem и задайте его свойству SummaryItem.SummaryType значение Custom.

  • Добавьте этот SummaryItem в коллекцию TotalSummaries.

  • Обработайте событие CustomSummary, чтобы вручную вычислить значение для этого SummaryItem.

    Присвойте параметру события e.SummaryValue свой результат.

    При обработке события CustomSummary используйте коллекцию e.Nodes для перебора целевых узлов (строк).

Пример — вычисление пользовательского общего итога

Этот пример создаёт пользовательский общий итог (с названием «Needs Attention»), который вычисляет число активов, требующих внимания. Это активы со статусом Maintenance, Degraded, Offline или Decommissioned.

treelist-summaries-custom-summary-example

<!-- XAML -->
<mxtl:TreeListControl x:Name="treeList" CustomSummary="OnCustomSummary">
    <mxtl:TreeListControl.TotalSummaries>
        <mxdc:SummaryItem FieldName="Status" SummaryType="Custom" Label="Needs Attention"/>
        <mxdc:SummaryItem FieldName="Name" SummaryType="Count" />
    </mxtl:TreeListControl.TotalSummaries>
</mxtl:TreeListControl>
// Code-behind
void OnCustomSummary(object sender, TreeListCustomSummaryEventArgs e)
{
    int assetsRequiringAttention = 0;
    foreach (var node in e.Nodes)
    {
        var status = (AssetStatus)treeList.GetCellValue(node, e.SummaryItem.FieldName);
        if (status is AssetStatus.Maintenance or AssetStatus.Degraded or AssetStatus.Offline or AssetStatus.Decommissioned)
            assetsRequiringAttention++;
    }
    e.SummaryValue = assetsRequiringAttention;
}

Связанный API

  • CustomSummary — возникает при вычислении значения итога. Используйте параметр события SummaryValue, чтобы передать пользовательское значение итога.

Получение значений итогов

Вычисленные значения итогов можно получить в коде с помощью следующего API:

object? totalValue = treeList.GetTotalSummaryValue(summaryItem);



* Эта страница переведена с использованием технологий машинного перевода.