---
title: Summaries
order: 49900
seealso: []
---

# Summaries

The [`DataGridControl`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/index.md) allows you to calculate summaries (aggregate functions) against cell values. Two summary types are supported:

- Total summaries, calculated against all rows.
- Group summaries, calculated against groups of rows when data is grouped.

![grid-summaries](https://eremexcontrols.net/images/grid-summaries.png)

The main summary calculation features include:

- Built-in summary functions: Sum, Min, Max, Count, and Average.
- Runtime management — Users can click the Σ button in the footer cell to add summaries or invoke the Summary Editor dialog for advanced summary operations.
- Multiple summaries per column — Each column can display multiple summaries calculated against that column's values.
- Cross-column summaries — You can calculate a summary against one column and display it in another.
- Custom summaries — You can handle the [`CustomSummary`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/CustomSummary/index.md) event to calculate a custom aggregate function according to your logic.

## Total Summaries

Total summaries are calculated across all rows and shown in the control's footer.

![grid-total-summaries](https://eremexcontrols.net/images/grid-total-summaries.png)

### Enable Total Summaries

Set the [`ShowTotalSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/ShowTotalSummaries/index.md) property to `true` to display the summary footer and thus enable total summary calculation. The summary footer is displayed at the bottom of the [`DataGridControl`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/index.md), below all rows. Initially, this footer is hidden.

```xml
<mxdg:DataGridControl x:Name="dataGrid" ShowTotalSummaries="True">...</mxdg:DataGridControl>
```

The summary footer contains summary cells for all columns. If user summary customization is enabled (default) the summary cells contain the `Σ` button used to show a summary menu and the summary editor.

**Related API**

- [`ShowTotalSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/ShowTotalSummaries/index.md) — Gets or sets whether the total summary footer is displayed.
- [`TotalSummaryPanelMinHeight`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/TotalSummaryPanelMinHeight/index.md) — Gets or sets the minimum height of the total summary footer.

### Define Total Summaries

Use the [`TotalSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/TotalSummaries/index.md) collection to define total summaries. Items in this collection are encapsulated by the [`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) class. Each [`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) object specifies the field to summarize, the summary type, the column in which to display the result, and other settings.

```xml
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>
```

**Related API**

- [`TotalSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/TotalSummaries/index.md) — Provides access to the collection of summary items ([`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) objects) that define total summaries.
- [`SummaryItem.FieldName`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/FieldName/index.md) — Gets or sets the name of the data field whose values are used to calculate the summary.
- [`SummaryItem.ShowInColumn`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/ShowInColumn/index.md) — Gets or sets the field name of the column that displays the summary value. If this property is not set, the summary is displayed in the column bound to `FieldName`.
- [`SummaryItem.SummaryType`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/SummaryType/index.md) — Gets or sets the type of the aggregate function (`Sum`, `Min`, `Max`, `Count`, or `Average`).
- [`SummaryItem.Label`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/Label/index.md) — Gets or sets a custom label to display instead of the default summary label. The default summary label displays the summary function. If the summary is associated with another column (see [`ShowInColumn`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/ShowInColumn/index.md)), the summary label also displays the caption of the column bound to [`SummaryItem.FieldName`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/FieldName/index.md).

## Group Summaries

Group summaries allow you to calculate aggregate functions against groups of rows when data is grouped by columns. Group summaries are displayed in group footers.

![grid-group-summaries](https://eremexcontrols.net/images/grid-group-summaries.png)

### Enable Group Summaries

Set the [`ShowGroupSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/ShowGroupSummaries/index.md) property to `true` to display group summary footers (initially, they are hidden) and thus enable group summary calculation. Group summary footers are displayed below all groups of rows. Each grouping level contains its own footer.

```xml
<mxdg:DataGridControl x:Name="dataGrid" ShowGroupSummaries="True">...</mxdg:DataGridControl>
```

**Related API**

- [`ShowGroupSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/ShowGroupSummaries/index.md) — Gets or sets whether group footers that display group summaries are displayed.
- [`GroupSummaryRowMinHeight`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/GroupSummaryRowMinHeight/index.md) — Gets or sets the minimum height of group footers.

### Define Group Summaries

Use the [`GroupSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/GroupSummaries/index.md) collection to define group summaries. As with the [`TotalSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/TotalSummaries/index.md) collection, items in the [`GroupSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/GroupSummaries/index.md) collection are represented by the [`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) class. Each [`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) object specifies the field to summarize, the summary type, the column in which to display the result, and other settings.

```xml
<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>
```

**Related API**

- [`GroupSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/GroupSummaries/index.md) — Provides access to the collection of summary items ([`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) objects) that define group summaries.
- [`SummaryItem.FieldName`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/FieldName/index.md) — Gets or sets the name of the data field whose values are used to calculate the summary.
- [`SummaryItem.ShowInColumn`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/ShowInColumn/index.md) — Gets or sets the field name of the column that displays the summary value. If this property is not set, the summary is displayed in the column bound to `FieldName`.
- [`SummaryItem.SummaryType`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/SummaryType/index.md) — Gets or sets the type of the aggregate function (`Sum`, `Min`, `Max`, `Count`, or `Average`).
- [`SummaryItem.Label`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/Label/index.md) — Gets or sets a custom label to display instead of the default summary label. The default summary label displays the summary function. If the summary is associated with another column (see [`ShowInColumn`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/ShowInColumn/index.md)), the summary label also displays the caption of the column bound to [`SummaryItem.FieldName`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/FieldName/index.md).


## User Summary Customizations

Summaries can be edited by users by default. In this mode, summary cells display the `Σ` button, used to invoke the summary menu:

![grid-summaries-summary-menu](https://eremexcontrols.net/images/grid-summaries-summary-menu.png)

Users can use this menu to:

- Add or remove summaries by toggling checkboxes next to summary functions.

    ![grid-summaries-summary-menu-multiple-items](https://eremexcontrols.net/images/grid-summaries-summary-menu-multiple-items.png)

- Select `Customize` to invoke the `Summary Editor` dialog. 

    ![grid-summaries-summary-editor](https://eremexcontrols.net/images/grid-summaries-summary-editor.png)

    In this dialog's `Summaries` tab, users can create cross-column summaries (summaries calculated against one column, but shown in another column).
    
    The `Order` tab allows users to change the display order of the existing summaries.

    ![grid-summaries-summary-editor-order-tab](https://eremexcontrols.net/images/grid-summaries-summary-editor-order-tab.png)


**Related API**

- [`AllowEditingTotalSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/AllowEditingTotalSummaries/index.md) — Gets or sets whether users can edit total summaries.
- [`AllowEditingGroupSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/AllowEditingGroupSummaries/index.md) — Gets or sets whether users can edit group summaries.

These properties only affect user capabilities to modify summaries and do not impact summary calculation performed in code.



## Custom Summaries

Custom summaries allow you to calculate aggregate values using your own logic. You can define custom total summaries and custom group summaries.

To add a custom summary, do the following:

- Create a [`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) object and set its [`SummaryItem.SummaryType`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/SummaryType/index.md) property to `Custom`. 

    - To calculate a custom total summary, add this [`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) to the [`TotalSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/TotalSummaries/index.md) collection. 
    - To calculate a custom group summary, add this [`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md) to the [`GroupSummaries`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/GroupSummaries/index.md) collection.

- Handle the [`CustomSummary`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/CustomSummary/index.md) event to manually calculate a value for this [`SummaryItem`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataControl/SummaryItem/index.md). 

    Set the `e.SummaryValue` event parameter to supply your custom result.

    While handling the [`CustomSummary`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/CustomSummary/index.md) event, use `e.RowIndexes` collection to iterate through target rows. Items in this collection specify [indexes](https://eremexcontrols.net/controls/datagrid/rows/index.md#identify-and-get-rows) of rows against which to calculate a custom summary. When calculating a custom total summary, the indexes refer to all DataGrid rows. When calculating a custom group summary, the CustomSummary event is raised for each group of rows, and indexes in the `e.RowIndexes` collection refer to rows within each group.
    
    !!! Tip 
        
        Row indexes allow you to address rows when using the DataGrid's row-wise API (for instance, [`DataGridControl.GetCellValue`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/GetCellValue/index.md))


### Example - Calculate a custom total summary

The following example creates a custom total summary that calculates the number of orders that exceed the $1000 amount.

![grid-summaries-custom-summary-example](https://eremexcontrols.net/images/grid-summaries-custom-summary-example.png)


```xml
<!-- 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>
```

```csharp
// 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();
}
```

**Related API**

- [`CustomSummary`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/CustomSummary/index.md) — Occurs when a summary value is calculated. Use the [`SummaryValue`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridCustomSummaryEventArgs/SummaryValue/index.md) event parameter to supply a custom summary value.


## Get Summary Values

You can retrieve calculated summary values in code using the following methods:

- [`DataGridControl.GetTotalSummaryValue`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/GetTotalSummaryValue/index.md) — Returns the calculated value of a total summary.
- [`DataGridControl.GetGroupSummaryValue`](https://eremexcontrols.net/API/Eremex.AvaloniaUI.Controls.DataGrid/DataGridControl/GetGroupSummaryValue/index.md) — Returns the calculated value of a group summary for a specific group row. The `rowIndex` parameter identifies the index of a target group row whose child rows are used to calculate a summary.

```csharp
object? totalValue = dataGrid.GetTotalSummaryValue(summaryItem);

// Get a summary value for the first group of rows
int rowIndex = -1; // Address the first group row.
object? groupValue = dataGrid.GetGroupSummaryValue(rowIndex, summaryItem);
```
