Итоги¶
DataGridControl позволяет вычислять итоги (агрегатные функции) по значениям ячеек. Поддерживаются два типа итогов:
- Общие итоги, вычисляемые по всем строкам.
- Групповые итоги, вычисляемые по группам строк, когда данные сгруппированы.
Основные возможности вычисления итогов:
- Встроенные функции итогов: Sum, Min, Max, Count и Average.
- Управление во время работы приложения — пользователи могут щёлкнуть кнопку Σ в ячейке нижней панели, чтобы добавить итоги или открыть диалог Summary Editor для расширенных операций с итогами.
- Несколько итогов на колонку — каждая колонка может отображать несколько саммари, вычисленных по значениям этой колонки.
- Итоги между колонками — можно вычислить итог по одной колонке и отобразить его в другой.
- Пользовательские итоги — можно обработать событие
CustomSummary, чтобы вычислить собственную агрегатную функцию по своей логике.
Общие итоги¶
Общие итоги вычисляются по всем строкам и отображаются в нижней панели контрола.
Включение общих итогов¶
Установите свойство ShowTotalSummaries в true, чтобы отобразить панель итогов и тем самым включить вычисление общих итогов. Панель итогов отображается в нижней части 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.
Групповые итоги¶
Групповые итоги позволяют вычислять агрегатные функции по группам строк, когда данные сгруппированы по колонкам. Групповые итоги отображаются в нижних панелях групп.
Включение групповых итогов¶
Установите свойство ShowGroupSummaries в true, чтобы отобразить нижние панели групповых итогов (изначально они скрыты) и тем самым включить вычисление групповых итогов. Нижние панели групповых итогов отображаются под всеми группами строк. У каждого уровня группировки своя панель.
Связанный 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.
Настройка итогов пользователем¶
По умолчанию итоги могут редактироваться пользователями. В этом режиме ячейки итогов отображают кнопку Σ, открывающую меню итогов:
Пользователи могут использовать это меню, чтобы:
-
Добавлять или удалять итоги, устанавливая или снимая флажки рядом с функциями итогов.
-
Выбрать
Customize, чтобы открыть диалогSummary Editor.На вкладке
Summariesэтого диалога пользователи могут создавать итоги между колонками (итоги, вычисляемые по одной колонке, но отображаемые в другой).На вкладке
Orderпользователи могут изменять порядок отображения существующих итогов.
Связанный 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.
<!-- 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);
* Эта страница переведена с использованием технологий машинного перевода.







