GridControl.CustomSummary Event
Allows you to calculate a custom summary.
Namespace: DevExpress.Xpf.Grid
Assembly: DevExpress.Xpf.Grid.v19.2.dll
Declaration
Event Data
The CustomSummary event's data class is CustomSummaryEventArgs. The following properties provide information specific to this event:
Property | Description |
---|---|
FieldValue | Gets the processed field value. |
GroupLevel | Gets the nested level of the group whose summary value is being calculated. |
GroupRowHandle | Gets a value identifying the group row whose child data rows are involved in summary calculation. |
IsGroupSummary | Gets whether a group summary value is being calculated. |
IsTotalSummary | Gets whether a total summary value is being calculated. |
Item | Gets a summary item whose value is being calculated. |
Row | Gets the currently processed row. |
RowHandle | Gets the handle of the processed row. |
SummaryProcess | Gets a value indicating calculation stage. |
TotalValue | Gets or sets the total summary value. |
TotalValueReady | Gets or sets whether the Calculation stage of the custom summary calculation process should be skipped. |
The event data class exposes the following methods:
Method | Description |
---|---|
GetGroupSummary(Int32, Object) | Returns the value of the specified group summary for the specified group row. |
GetValue(String) | Returns the value in the specified field |
Remarks
Total summaries and group summaries have predefined aggregate functions (COUNT, MAX, MIN, SUM, and AVG). To calculate custom summaries, handle the CustomSummary event. This event allows you to implement custom aggregate functions or use a custom algorithm to calculate summary values.
If the GridControl.View property is set to TreeListView, use the TreeListView.CustomSummary event.
Note
The CustomSummary event does not work in Server Mode.
Refer to the Custom Summary topic for more information.
Example
The following example demonstrates how to use custom summaries to count the total number of empty cells in the specified grid column.
Note
A complete sample project is available at https://github.com/DevExpress-Examples/how-to-summarize-empty-cells-e948.
<Window x:Class="CustomSummary_EmptyCells.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
Title="Window1" Height="350" Width="450" >
<Grid>
<dxg:GridControl x:Name="grid" CustomSummary="grid_CustomSummary" GroupCount="1">
<dxg:GridControl.SortInfo>
<dxg:GridSortInfo FieldName="Text" />
</dxg:GridControl.SortInfo>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Text" />
<dxg:GridColumn FieldName="Number" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView x:Name="view" AutoWidth="True"
NavigationStyle="Cell" ShowTotalSummary="True"/>
</dxg:GridControl.View>
<dxg:GridControl.TotalSummary>
<dxg:GridSummaryItem FieldName="Number" SummaryType="Custom"
DisplayFormat="Total empty cells count: {0}"/>
</dxg:GridControl.TotalSummary>
<dxg:GridControl.GroupSummary>
<dxg:GridSummaryItem FieldName="Number" SummaryType="Custom"
DisplayFormat="Group empty cells count: {0}"/>
</dxg:GridControl.GroupSummary>
</dxg:GridControl>
</Grid>
</Window>
using System.Windows;
using System.Collections.Generic;
using DevExpress.Data;
using DevExpress.Xpf.Data;
using DevExpress.Xpf.Grid;
// ...
namespace CustomSummary_EmptyCells {
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window {
List<TestData> list;
Dictionary<int, bool> selectedValues = new Dictionary<int, bool>();
public Window1() {
InitializeComponent();
list = new List<TestData>();
for (int i = 0; i < 100; i++) {
list.Add(new TestData() { Text = "group " + i % 10, Number = i });
if (i % 3 == 0)
list[i].Number = null;
}
grid.ItemsSource = list;
}
int emptyCellsTotalCount = 0;
int emptyCellsGroupCount = 0;
void grid_CustomSummary(object sender, CustomSummaryEventArgs e) {
if (((GridSummaryItem)e.Item).FieldName != "Number")
return;
if (e.IsTotalSummary) {
if (e.SummaryProcess == CustomSummaryProcess.Start) {
emptyCellsTotalCount = 0;
}
if (e.SummaryProcess == CustomSummaryProcess.Calculate) {
int? val = (int?)e.FieldValue;
if (!val.HasValue)
emptyCellsTotalCount++;
e.TotalValue = emptyCellsTotalCount;
}
}
if (e.IsGroupSummary) {
if (e.SummaryProcess == CustomSummaryProcess.Start) {
emptyCellsGroupCount = 0;
}
if (e.SummaryProcess == CustomSummaryProcess.Calculate) {
int? val = (int?)e.FieldValue;
if (!val.HasValue)
emptyCellsGroupCount++;
e.TotalValue = emptyCellsGroupCount;
}
}
}
public class TestData {
public string Text { get; set; }
public int? Number { get; set; }
}
}
}
Related GitHub Examples
The following code snippet (auto-collected from DevExpress Examples) contains a reference to the CustomSummary event.
Note
The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.