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

Итоги

DataGridControl позволяет вычислять итоги (агрегатные функции) по значениям ячеек. Поддерживаются два типа итогов:

  • Общие итоги, вычисляемые по всем строкам.
  • Групповые итоги, вычисляемые по группам строк, когда данные сгруппированы.

grid-summaries

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

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

Общие итоги

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

grid-total-summaries

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

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

<mxdg:DataGridControl x:Name="dataGrid" ShowTotalSummaries="True">...</mxdg:DataGridControl>

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

Связанный API

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

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

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

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

<mxdg:DataGridControl x:Name="dataGrid" ShowTotalSummaries="True">
    <mxdg:DataGridControl.TotalSummaries>
        <mxdc:SummaryItem FieldName="Name" SummaryType="Count" />
        <mxdc:SummaryItem FieldName="SaleDate" SummaryType="Min" ShowInColumn="Total" />
        <mxdc:SummaryItem FieldName="SaleDate" SummaryType="Max" ShowInColumn="Total" />
        <mxdc:SummaryItem FieldName="Price" SummaryType="Min" />
        <mxdc:SummaryItem FieldName="Price" SummaryType="Max" />
        <mxdc:SummaryItem FieldName="Quantity" SummaryType="Average" />
        <mxdc:SummaryItem FieldName="Total" SummaryType="Sum" />
    </mxdg:DataGridControl.TotalSummaries>
</mxdg:DataGridControl>

Связанный API

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

Групповые итоги

Групповые итоги позволяют вычислять агрегатные функции по группам строк, когда данные сгруппированы по колонкам. Групповые итоги отображаются в нижних панелях групп.

grid-group-summaries

Включение групповых итогов

Установите свойство ShowGroupSummaries в true, чтобы отобразить нижние панели групповых итогов (изначально они скрыты) и тем самым включить вычисление групповых итогов. Нижние панели групповых итогов отображаются под всеми группами строк. У каждого уровня группировки своя панель.

<mxdg:DataGridControl x:Name="dataGrid" ShowGroupSummaries="True">...</mxdg:DataGridControl>

Связанный API

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

Определение групповых итогов

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

<mxdg:DataGridControl x:Name="dataGrid" ShowGroupSummaries="True">
    <mxdg:DataGridControl.GroupSummaries>
        <mxdc:SummaryItem FieldName="OrderId" SummaryType="Count" />
        <mxdc:SummaryItem FieldName="Quantity" SummaryType="Sum" />
        <mxdc:SummaryItem FieldName="TotalPrice" SummaryType="Sum" />
        <mxdc:SummaryItem FieldName="TotalPrice" SummaryType="Average" />
    </mxdg:DataGridControl.GroupSummaries>
</mxdg:DataGridControl>

Связанный API

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

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

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

grid-summaries-summary-menu

Пользователи могут использовать это меню, чтобы:

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

    grid-summaries-summary-menu-multiple-items

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

    grid-summaries-summary-editor

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

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

    grid-summaries-summary-editor-order-tab

Связанный API

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

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

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

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

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

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

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

    Установите параметр события e.SummaryValue, чтобы передать свой результат.

    При обработке события CustomSummary используйте коллекцию e.RowIndexes для перебора целевых строк. Элементы этой коллекции задают индексы строк, по которым вычисляется пользовательский итог. При вычислении пользовательского общего итога индексы относятся ко всем строкам DataGrid. При вычислении пользовательского группового итога событие CustomSummary возникает для каждой группы строк, а индексы в коллекции e.RowIndexes относятся к строкам внутри этой группы.

    Совет

    Индексы строк позволяют обращаться к строкам при использовании построчного API DataGrid (например, DataGridControl.GetCellValue)

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

Этот пример создаёт пользовательский общий итог, который вычисляет число заказов на сумму более $1000.

grid-summaries-custom-summary-example

<!-- XAML -->
<mxdg:DataGridControl x:Name="dataGrid" CustomSummary="OnCustomSummary">
    <mxdg:DataGridControl.TotalSummaries>
        <mxdc:SummaryItem FieldName="Total" SummaryType="Custom" Label="Count (Total > $1000)" />
    </mxdg:DataGridControl.TotalSummaries>
</mxdg:DataGridControl>
// Code-behind
void OnCustomSummary(object sender, DataGridCustomSummaryEventArgs e)
{
    int largeOrdersCount = 0;
    foreach (int rowIndex in e.RowIndexes)
    {
        if ((decimal)dataGrid.GetCellValue(rowIndex, e.SummaryItem.FieldName) > 1000m)
            largeOrdersCount++;
    }
    e.SummaryValue = largeOrdersCount.ToString();
}

Связанный API

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

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

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

  • DataGridControl.GetTotalSummaryValue — возвращает вычисленное значение общего итога.
  • DataGridControl.GetGroupSummaryValue — возвращает вычисленное значение группового итога для конкретной строки группы. Параметр rowIndex определяет индекс целевой строки группы, дочерние строки которой используются для вычисления итога.
object? totalValue = dataGrid.GetTotalSummaryValue(summaryItem);

// Получить значение итога для первой группы строк
int rowIndex = -1; // Обратиться к первой строке группы.
object? groupValue = dataGrid.GetGroupSummaryValue(rowIndex, summaryItem);



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